目录
一: flume的定义
Flume是一个高可用的,高可靠的,分布式的海量日志采集,聚合和传输的系统。其最主要的作用是实时读取服务器本地磁盘的数据,将数据写入到HDFS。
二:flume基础架构
- Agent:是一个JVM进程,它以事件的形式将数据从源头送至目的地。Agent由三部分组成:Source, Channel, Sink.
- Source:是负责接收数据到Flume Agent的组件,Source组件可以处理各种类型,各种格式的日志数据。
- Channel:位于Source和Sink之间的缓冲区。Channel允许Source和sink运行在不同的速率上,Channel是线程安全的,可以同时处理几个Source的写入操作和几个SInk的读取操作。Flume自带几种Channel:Memory Channel, File Channel , Kafka Channel.
- Sink:Sink不断轮询Channel中的事件并且批量移除他们,并将这些事件批量写入到存储或者索引系统,或者发送到另一个Flume Agent
- Event:是flume数据传输的基本单元,以Event的形式将数据从源头送到目的地。Event由Header和Body两部分组成。
三:Flume Agent内部原理
四:Flume配置文件解析
【注意】:一个sink只能对应一个Channel
五:ChannelSelector
ChannelSecctor的作用就是选出Event将要发往哪个Channel.其共有两种类型,
分别是Replicating(复制)和Multiplexing(多路复用)
- ReplicatingSelector会将同一个Event发往所有的Channel
- Multiplexing会根据相应的原则,将不同的Event发往不同的Channel.
六:Flume的事务机制
Flume的事务机制(类似数据库的事务机制):Flume使用两个独立的事务分别负责从
Source到Channel,以及从Channel到Sink的事件传递。比如 spooling directory source 为
文件的每一行创建一个事件,一旦事务中所有的事件全部传递到 Channel 且提交成功,
那 么 Soucrce 就将该文件标记为完成。同理,事务以类似的方式处理从 Channel
到 Sink 的传 递过程,如果因为某种原因使得事件无法记录,那么事务将会回滚。
且所有的事件都会保持 到 Channel 中,等待重新传递
七:Flume采集数据会丢失吗
根据Flume的架构原理,Flume是不可能丢失数据的,其内部有完善的事务机制,
Source到Channel是事务性的,Channel到Sink是事务性的,因此这两个环节是
不会出现数据的丢失,唯一可能丢失数据的情况是Channel采用memoryChannel,
agent宕机导致数据丢失,或者Channel存储数据已满,导致Source不再写入,未写入的数据丢失。
【注意】:Flume 不会丢失数据,但是有可能造成数据的重复,例如数据已经成功由 Sink 发出,
但是没有接收到响应,Sink 会再次发送数据,此时可能会导致数据的重复
参考:尚硅谷大数据课程课件