企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] # 组件介绍 | 名称 | 解析 | |---|---| | Event | 一个数据单元,带有一个可选的消息头,其实就是一条消息,一个日志(kafka的消息没有消息头,因此flume消息进入kafka后,消息头就丢失了) | | Flow | 数据流,Event从源点到达目的点的迁移的抽象 | | Client | 操作位于源点处的Event,将其发送到Flume Agent | | Agent | 一个独立的Flume进程,包含组件Source,Channel,Sink | | Source | 用来获取Event并写入Channel | | Channel | 中转Event的一个临时存储,保存有Source组件传递过来的Event,可以认为是一个队列 | | Sink | 从Channel中读取并移除Event,将Event传递到Flow Pipeline中的下一个Agent或者其他存储系统 | # 采集系统组件解析 **source** 1. Avro Source     侦听 Avro 端口并从外部 Avro 客户端流接收事件。当与另一个(上一跳)Flume 代理的内置 Avro Sink 配对时,它可以创建分层收集拓扑。 2. Taildir Source     在 Flume1.7 之前如果想要监控一个文件新增的内容,我们一般采用的 source 为 exec tail ,但是这会有一个弊端,就是当你的服务器宕机重启后,此时数据读取还是从头开始,这 显然不是我们想看到的! 在 Flume1.7 没有出来之前我们一般的解决思路为:当读取一条 记录后,就把当前的记录的行号记录到一个文件中,宕机重启时,我们可以先从文件中获取 到最后一次读取文件的行数,然后继续监控读取下去。保证数据不丢失、不重复。     在Flume1.7时新增了一个source 的类型为taildir,它可以监控一个目录下的多个文件, 并且实现了实时读取记录保存的断点续传功能。     但是 Flume1.7 中如果文件重命名,那么会被当成新文件而被重新采集 **Channel** 1. Memory Channel     Memory Channel 把 Event 保存在内存队列中,该队列能保存的 Event 数量有最大值上限。 由于 Event 数据都保存在内存中,Memory Channel 有最好的性能,不过也有数据可能会丢 失的风险,如果 Flume 崩溃或者重启,那么保存在 Channel 中的 Event 都会丢失。同时由于 内存容量有限,当 Event 数量达到最大值或者内存达到容量上限,Memory Channel 会有数 据丢失。 2. File Channel File Channel 把 Event 保存在本地硬盘中,比 Memory Channel 提供更好的可靠性和可恢 复性,不过要操作本地文件,性能要差一些。 3. Kafka Channel     Kafka Channel 把 Event 保存在 Kafka 集群中,能提供比 File Channel 更好的性能和比Memory Channel 更高的可靠性 **Sink** 1. Avro Sink     Avro Sink 是 Flume 的分层收集机制的重要组成部分。 发送到此接收器的 Flume 事件变 为 Avro 事件,并发送到配置指定的主机名/端口对。事件将从配置的通道中按照批量配置的 批量大小取出。 2. Kafka Sink     Kafka Sink 将会使用 FlumeEvent header 中的 topic 和 key 属性来将 event 发送给 Kafka。 如果 FlumeEvent 的 header 中有 topic 属性,那么此 event 将会发送到 header 的 topic 属性指 定的 topic 中。如果 FlumeEvent 的 header 中有 key 属性,此属性将会被用来对此 event 中的 数据指定分区,具有相同 key 的 event 将会被划分到相同的分区中,如果 key 属性 null,那 么 event 将会被发送到随机的分区中。     可以通过自定义拦截器来设置某个 event 的 header 中的 key 或者 topic 属性 # source组件 ![](https://box.kancloud.cn/192ccd63b3ef8ba59b152d9d184ccef3_775x532.png) ![](https://box.kancloud.cn/32396056f6b56e2e5a0c1972bb9487ca_773x124.png) # channel组件 ![](https://box.kancloud.cn/f016017c6bf95abb8922c0158062e131_774x424.png) Channel参数 ~~~ capacity:默认该通道中最大的可以存储的event数量,容量 trasactionCapacity:每次最大可以从source中拿到或者送到sink中的event数量,事务容量 keep-alive:event添加到通道中或者移出的允许时间 ~~~ # sink组件 ![](https://box.kancloud.cn/e4ccfd7b490da9786511bd363da8f68a_772x679.png) Flume支持众多的source、channel、sink类型,详细手册可参考官方文档 `http://flume.apache.org/FlumeUserGuide.html`