1、为什么选用Flume?(快、实时处理、不同介质的读取速度不一致,影响数据传输)
2、Flume组成架构(主要在Agent:source、channel、sink)
3、Flume Agent内部原理
4、案例
监听数据端口案例分析
实时读取本地文件到HDFS案例
实时读取目录文件到HDFS案例
单数据源多出口案例
5、其他
- Flume是Apache的顶级项目
- 重构后的版本统称为 Flume NG
- Flume是一个分布式、可靠、高可用的海量日志聚合系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据的简单处理,并写到各种数据接收方的能力。
- Event事件是Flume的基本数据单位,也就是传送的是事件
- Flume 运行的核心是 Agent,Flume以agent为最小的独立运行单位
- Source接受数据生成Event、Event携带数据、Source将Event格式化后,推入Channel中,Channel可以看成是缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source
- Event的格式采用了json格式来定义的,这个json串中包含了2个部分:headers和body
Flume概念:
- Client:Client生产数据,运行在一个独立的线程。
- Event: 一个数据单元,消息头和消息体组成。(Events可以是日志记录、 avro 对象等。)
- Agent: 一个独立的Flume进程,包含组件Source、 Channel、 Sink。(Agent使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。)
- Source: 数据收集组件。(source从Client收集数据,传递给Channel)
- Channel: 中转Event的一个临时存储,保存由Source组件传递过来的Event。(Channel连接 sources 和 sinks ,这个有点像一个队列。)
- Sink: 从Channel中读取并移除Event, 将Event传递到FlowPipeline中的下一个Agent(如果有的话)(Sink从Channel收集数据,运行在一个独立线程。)
Flume三级别可靠性:end-to-end、Store on failure、Best effort
- end-to-end:收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。
- Store on failure:这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送
- Best effort:数据发送到接收方后,不会进行确认
Flume大致过程:
- 写flume配置文件(source、channel、sink类型等等)
- 找到配置文件,开启监控
- 运行我们的基本程序
- flume会将对应日志数据通过sink传入到下一过程。