特点:
flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力
Flume的可靠性:
当节点出现故障时,日志能够被传送到其他节点上而不会丢失。
Flume提供了三种级别的可靠性保障:
1.end to end:收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。
2.Store on failure:这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送
3.Besteffort:数据发送到接收方后,不会进行确认
Flume的可恢复性:
使用FileChannel,事件持久化在本地文件系统里(性能较差)
Flume的一些核心概念:
名称 |
说明 |
Agent(代理) |
使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。 |
Client(委托) | 生产数据,运行在一个独立的线程。 |
Source(来源) | 从Client收集数据,传递给Channel。 |
Sink(接收器) | 从Channel收集数据,运行在一个独立线程。 |
Channel(通道) | 连接 sources 和 sinks ,类似一个队列。 |
Events(事件) | 可以是日志记录、 avro 对象等。 |
部署类型:
1.单一流程:Flume以agent为最小的独立运行单位。一个agent就是一个JVM。单agent由Source、Sink和Channel三大组件构成。
2.多代理流程:可以将多个Agent顺序连接起来,将最初的数据源经过收集,存储到最终的存储系统中。这是最简单的情况,一般情况下,应该控制这种顺序连接的Agent 的数量,因为数据流经的路径变长了,如果不考虑failover的话,出现故障将影响整个Flow上的Agent收集服务。
3.流的合并:这种情况应用的场景比较多,比如要收集Web网站的用户行为日志, Web网站为了可用性使用的负载集群模式,每个节点都产生用户行为日志,可以为每 个节点都配置一个Agent来单独收集日志数据,然后多个Agent将数据最终汇聚到一个用来存储数据存储系统,如HDFS上。
4.多路复用流:Flume还支持多级流,什么多级流?来举个例子,当syslog, java, nginx、 tomcat等混合在一起的日志流开始流入一个agent后,可以agent中将混杂的日志流分开,然后给每种日志建立一个自己的传输通道。
5.负载平衡:将Channel暂存的Event均衡到对应的多个Sink组件上,而每个Sink组件分别连接到一个独立的Agent上 。
Flume抓取日志类型
1.Avro序列化:Avro可以发送一个给定的文件给Flume
2.Spool:Spool监测配置的目录下新增的文件,并将文件中的数据读取出来
3.Exec:EXEC执行一个给定的命令获得源的变化。
4.Syslogtcp:Syslogtcp监听TCP的端口做为数据源。
5.JSONHandler:接受json格式数据。
6.Hadoop sink:配置Hadoop接受数据。
7.File Roll Sink:配置本地文件接受数据。