目录
Flume-1.9.0安装、监听端口、监控本地文件并上传HDFS、监控目录新文件并上传HDFS、监控追加文件(断点续传)
Flume结构
Flume的执行过程:Sources——Channel Processor——Interceptors——Channel Selector——Channels——Sink Processor——Sinks
其中,从Soucrce到Channel和从Channel到Sink存在事务(put和take)
Avro串联
为了在多个Agent或跃点之间流动数据,前一个Agent的sink和当前Agent的source必须是avro类型,sink指向source的主机名(或IP地址)和端口。这是其他复杂结构的基础,但不建议连接过多的flume,因为flume数量过多不仅会影响传输速率,而且一旦传输过程中某个节点flume宕机,会影响整个传输系统。
复制和多路复用
Flume支持将事件流多路传输到一个或多个目的地。这是通过定义一个流复用器来实现的,该流复用器可以将事件复制或有选择地路由到一个或多个channel。
上面这个例子可以看到,叫做foo的Agent的source可以将数据流分到三个不同的channel。在选择channel时(Channel Selector)可以是复制(Replicating)或多路复用(Multiplexing)。
对于复制,每个事件都会发送到所有通道。对于多路复用,当事件的属性与预先配置的值匹配时,将事件传递到对应的可用通道。比如下面官方给定例子,如果事件的属性被设置为CZ,则选择c1通道;如果事件的属性被设置为US,则选择c2和c3通道;否则选择c4通道;
a1.sources = r1
a1.channels = c1 c2 c3 c4
a1.sources.r1.selector.type = multiplexing
a1.sources.r1.selector.header = state
a1.sources.r1.selector.mapping.CZ = c1
a1.sources.r1.selector.mapping.US = c2 c3
a1.sources.r1.selector.default = c4
Channel Selector默认选择复制策略(Replicating)
负载均衡和故障转移
Sink Processor共有三种类型,分别是DefaultSinkProcessor、LoadBalancingSinkProcessor和FailoverSinkProcessor。
DefaultSinkProcessor 对 应 的 是 单 个 的 Sink ,LoadBalancingSinkProcessor和FailoverSinkProcessor对应的是Sink Group,LoadBalancingSinkProcessor可以实现负载均衡的功能,FailoverSinkProcessor可以实现故障转移的功能。
聚合
这种模式是非常常见的,也非常实用。日常web应用通常分布在成千上万个服务器,产生的日志非常多,处理起来也非常麻烦。用flume能很好的解决这一问题,每台服务器部署一个flume采集日志,传送到一个集中收集日志的flume,再由此flume上传到hdfs、hive、hbase等,进行日志分析。
事务机制
Flume的事务机制(类似数据库的事务机制):Flume使用两个独立的事务分别负责从Soucrce到Channel,以及从Channel到Sink的事件传递。比如spooling directory source为文件的每一行创建一个事件,一旦事务中所有的事件全部传递到Channel且提交成功,那么Soucrce就将该文件标记为完成。同理,事务以类似的方式处理从Channel到Sink的传递过程,如果因为某种原因使得事件无法记录,那么事务将会回滚。且所有的事件都会保持到Channel中,等待重新传递。
根据Flume的架构原理,Flume是不可能丢失数据的,其内部有完善的事务机制,Source到Channel是事务性的,Channel到Sink是事务性的,因此这两个环节不会出现数据的丢失,唯一可能丢失数据的情况是Channel采用memoryChannel,agent宕机导致数据丢失,或者Channel存储数据已满,导致Source不再写入,未写入的数据丢失。
Flume不会丢失数据,但是有可能