目录
一、简介
Flume 是一个 分布式的、可靠的、高可用的 海量日志聚合 系统。
支持 自定义 数据的 生产方 和 接收方,并可以对数据进行简单的处理。
初始版本统称为 Flume OG;重构版本 称为 Flume NG。
二、使用场景
对于线上数据,一般是 存储到磁盘(落地) 或者 通过Socket 传输给另一个系统。
但在实际应用中,我们难以通过 线上应用 或 服务 去修改端口,从而实现向Kafka里写数据。
于是 需要 借助 Flume 来实现向Kafka里面写数据。
三、体系架构
(1)数据采集流程
(2)架构组件介绍:
Client 客户端: 负责生产数据;运行在一个独立的线程中。
Agent 代理:是Flume的核心组件,通过JVM运行。 包含组件:Source、Channel、Sink。
一台机器运行一个Agent,一个 Agent 可以包含多个 Source 和 Sink。
Source 源:是一个数据缓冲区。从 Client 收集数据 - 格式化 - 封装到 Event 。
使用内存存储数据,若超过阈值,则存入文件中。
Event 事件: 是一个数据单元,由 消息头 和 消息体 组成。
Interceptor 过滤器:位于 Source 和 Channel 之间。
Channel 管道:Event 中转站。负责 从 Source 接收数据,传递给 Sinks。
可以将 Event 暂存到内存中 或 持久化到磁盘 上,待Sink处理成功后删除。
Flow 流:Event 流动路径的抽象。
Sink 存储: 负责 从 Channel 拉取数据,发送给接收方。
四、执行流程
五、特性-复杂的流动性
(1)多个 Agent 横向连接。
(2)第一层 存在 多个 Agent,在第二层设置一个 Agent 做汇集操作。
(3)事件流 复用 流向不同的目的地。
六、事务
(1)推送事务流程
先将 数据 写入 临时缓冲区,然后检查 Channel 容量 是否充足。
若充足,则将数据推入管道。
若不足,则将数据回滚到缓冲区。
(2)拉取事务流程
先将 数据 拉去 到 临时缓冲区,然后检查 数据 是否发送成功。
若成功,则删除缓冲区数据。
若失败,则回滚缓冲区数据到管道。
(3)可靠
只有当 Sink 接收到 数据完成落地的反馈信息 后, 才会将数据从 Channel 中删除。
(4)可恢复
若将 Event 存储在 磁盘上,数据丢失后,可恢复。
七、优点
当 收集数据的速度 大于 写出数据的速度 时,Flume可以对 数据生产者 和 数据存放者 进行自动调整,使数据得以平稳传输。
Channel 基于事务,保证了数据的一致性。