Agent
Agent 是一个 JVM 进程,其由三部分组成 Source,Channel,Sink。
Agent 以事件(event)的方式将数据从源头送往目的地。
Source
Source 是负责接受数据至 Agent,Flume 本身自带了非常多的 Source,让其能够处理各种来源和各种格式的日志数据,当然用户也可以自定义 Source 来满足使用需求。
Sink
Sink 负责将数据写入目的地,其不断的轮询 Channel 中是否有新的数据并批量的搬移,Sink 可以将数据直接写入文件存储系统,也可以将数据发往另一个 Flume Agent,在实际应用中 Flume 经常与 Kafka 进行对接,因此 Sink 也可以直接将数据发送给 Kafka。与 Source 相同 Flume 本身也提高了非常多的 Sink 以供用户向数据发往各种各样的目的地,当然用户也可以自定义 Sink 来满足使用需求。
Channel
Channel 处于 Source 与 Sink 之间,起到了缓冲的作用,由于 Channel 的存在可以允许 Sink 写入数据的速率与 Source 获取数据的速率不同。此外,Channel 是线程安全的,可以同时处理多个 Source 和 Sink 的读取与写入。但有一点需要注意,可以多个 Source 往一个 Channel 写,也可以一个Channel 发往多个 Sink (通过负载均衡或故障转移的方式),但是不能多个 Channel 发往一个 Sink。
Flume 自带俩种 Channel,Memory Channel 和 File Channel
Memory Channel 是内存中的队列,其效率较高,但是缺点是当发送程序死亡,机器宕机等情况时会导致数据的丢失。
File Channel 将事件数据写入磁盘,因此无需担心数据丢失的风险,但是效率较 Memory 低。
Event
Flume 的传输单元,Flume 以 事件(Event)的形式将数据从源头送至目的地,Event 由 Header 和 Body 俩部分组成,Header 存放事件的头信息,其内部数据为 K-V 的键值对形式,Body 存放数据本体,其内部为字节(Byte)数组。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。