首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hadoop进级教程之-Flume架构原理

Apache Flume是一个分布式的、可靠和易用的日志收集系统,用于将大量日志数据从许多不同的源进行收集、聚合,最终移动到一个集中的数据中心进行存储。Flume的使用不仅仅限于日志数据聚合,由于数据源是可定制的,Flume可以用于传输大量数据,包括但不限于网络流量数据、社交媒体生成的数据、电子邮件消息和几乎所有可能的数据源。

架构原理

Flume中最小的独立运行单位是Agent,Agent是一个JVM进程,运行在日志收集节点(服务器节点),其包含三个组件——Source(源)、Channel(通道)和Sink(接收地)。数据可以从外部数据源流入到这些组件,然后再输出到目的地。一个Flume单节点架构如图

Flume中传输数据的基本单位是event(如果是文本文件,通常是一行记录),event包括event头(headers)和event体(body),event头是一些key-value键值对,存储在Map集合中,就好比HTTP的头信息,用于传递与体不同的额外信息。event体为一个字节数组,存储实际要传递的数据。event的结构如图

event从Source流向Channel,再流向Sink,最终输出到目的地。event的数据流向如图

Source用于消费外部数据源中的数据(event,例如Web系统产生的日志),一个外部数据源(如Web服务器)可以以Source识别的格式向Source发送数据。

Channel用于存储Source传入的数据,当这些数据被Sink消费后则会自动删除。

Sink用于消费Channel中的数据,然后将其存放进外部持久化的文件系统中(例如HDFS、HBase和Hive等)。

Flume可以在一个配置文件中指定一个或者多个Agent,每个Agent都需要指定Source、Channel和Sink三个组件以及他们的绑定关系,从而形成一个完整的数据流。

Source、Channel和Sink根据功能的不同有不同的类型,Source组件根据数据源的不同,常用类型与描述如表

Channel组件根据存储方式的不同,常用类型与描述如表

Sink组件根据输出目的地的不同,常用类型与描述如表

Flume除了可以单节点直接采集数据外,也提供了多节点共同采集数据的功能,多个Agent位于不同的服务器上,每个Agent的Avro Sink将数据输出到了另一台服务器上的同一个Avro Source进行汇总,最终将数据输出到了HDFS文件系统中

此外,Flume还支持将数据流多路复用到一个或多个目的地,如图

下节课我们讲集中实战,感谢继续关注

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OL6iesp95CG4kTpzVVNfmJjQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券