Flume组件

1、什么是Flume:apache顶级项目,主要用来做数据采集。分布式、高可用,将海量日志进行采集、聚合、传输的系统。能够对数据进行简单处理在发送到接收方。

2、Flume组件:source、channel、sink,一个Flume可以有一个source,多个channel、多个sink

(1)source:数据收集组件,将日志从不同的client中收集过来。

(2)channel:数据缓冲区。临时存储从source传过来的Event。

File Channel:数据存储在磁盘,宕机数据可以保存。但是传输速率慢。适合对数据传输可靠性要求高的场景,比如,金融行业。
Memory Channel:数据存储在内存中,宕机数据丢失。传输速率快。适合对数据传输可靠性要求不高的场景,比如,普通的日志数据。

Kafka Channel:减少了 Flume 的 Sink 阶段,提高了传输效率

(3)sink:将event从channel中读取出来并移除,传输至数据接收方,或者连接下一个agent的线管中。

source、channel、sink共同组成了一个agent,一个agent就是一个JVM,一个angent运行在一台服务器上。

event是一个数据单元,由消息头和消息体组成,可以是日志记录、avro对象。

3、source常见的源:spooling directory、exec、syslog、JMS Source、Avro Source

三种可监控文件或目录的source:

spooling directory source:监控一个目录,并同步目录下的新文件到sink,被同步完的文件可被立即删除或打上标记。适用于同步新文件,不适用于实时追加日志的文件进行监听和同步。可改进解决。

exec source:可以通过tail -f 命令tail住一个文件,然后将日志文件追加的内容实时同步到sink中。但是存在的问题就是agent挂了,再次重启,会有数据重复读取的问题。可通过添加uuid来解决,或改进。

taildir source:可以实时监控一批文件,并记录每个文件最新消费的位置。agent重启后不会有重复消费的问题,断点续传,多个文件。

JMS Source:java 消息中间件。

Avro Source:数据序列化系统。

补充:这里的source组件可以自定义:例如项目需要监控mysql中的数据,实时的从mysql中拉取数据,这时我们可以自己实现MysqlSource。参考官方文档,需要继承AbstractSource并实现其中的方法。

4、双层Flume:双层Flume主要用来做    负载均衡、容灾

第一层Flume做数据采集,第二层Flume做数据聚合和sink。两层之间采用sinkGroup实现负载均衡。

第一层某个代理失败,那么可以考虑由第一层的其他节点来接管故障节点。如果是第二层代理停止运行,则为了防止数据丢失,只能让每一个第一层代理具有多个冗余的Avro sink,然后把这些sink安排到同一个sink组中,如果第二层代理中的某个代理出现问题,则该事件会被传递给该层sink组的其他代理来完成,以此来实现故障转移和负载均衡。

  这种情况应用的场景比较多,比如要收集Web网站的用户行为日志, Web网站为了可用性使用的负载集群模式,每个节点都产生用户行为日志,可以为每 个节点都配置一个Agent来单独收集日志数据,然后多个Agent将数据最终汇聚到一个用来存储数据存储系统,如HDFS上。

5、Flume多层代理防止数据丢失:

https://blog.csdn.net/qq_26442553/article/details/79042603

https://blog.csdn.net/huonan_123/article/details/88421847

6、Flume开发中常用的组件配置

https://blog.csdn.net/qq_26442553/article/details/79039205

 参考博客:https://www.cnblogs.com/frankdeng/p/9067102.html

原文地址:https://www.cnblogs.com/guoyu1/p/12019186.html