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组件根据存储方式的不同,常用类型与描述如表
ink组件根据输出目的地的不同,常用类型与描述如表
Flume除了可以单节点直接采集数据外,也提供了多节点共同采集数据的功能,多个Agent位于不同的服务器上,每个Agent的Avro Sink将数据输出到了另一台服务器上的同一个Avro Source进行汇总,最终将数据输出到了HDFS文件系统中
来源:
作者:孙俊伟
微 信 名称:编程树
微 信 号:yuzhiyin1856
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)