Flume官网分享之二

154 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Flume组件的说明

Flume Source

Source类型说明
Avro Source支持Avro协议(实际上是Avro RPC),内置支持   
Thrift Source支持Thrift协议,内置支持  
Exec Source基于Unix的command在标准输出上生产数据  
JMS Source从JMS系统(消息、主题)中读取数据,ActiveMQ已经测试过   
Spooling Directory Source监控指定目录内数据变更   
Twitter 1% firehose Source通过API持续下载Twitter数据,试验性质   
Netcat Source监控某个端口,将流经端口的每一个文本行数据作为Event输入  
Sequence Generator Source序列生成器数据源,生产序列数据   
Syslog Sources读取syslog数据,产生Event,支持UDP和TCP两种协议    
HTTP Source基于HTTP POST或GET方式的数据源,支持JSON、BLOB表示形式   
Legacy Sources兼容老的Flume OG中Source(0.9.x版本)

Flume Channel

Channel类型说明
MemoryChannelEvent数据存储在内存中\
JDBCChannelEvent数据存储在持久化存储中,当前FlumeChannel内置支持Derby\
FileChannelEvent数据存储在磁盘文件中\
SpillableMemoryChannelEvent数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件(当前试验性的,不建议生产环境使用)\
PseudoTransactionChannel测试用途\
CustomChannel自定义Channel实现

Flume Sink

Sink类型说明
HDFS Sink数据写入HDFS\
Logger Sink数据写入日志文件\
Avro Sink数据被转换成Avro Event,然后发送到配置的RPC端口上\
Thrift Sink数据被转换成Thrift Event,然后发送到配置的RPC端口上\
IRC Sink数据在IRC上进行回放\
File Roll Sink存储数据到本地文件系统\
Null Sink丢弃到所有数据\
HBase Sink  数据写入HBase数据库\
Morphline Solr Sink  数据发送到Solr搜索服务器(集群)\
ElasticSearch Sink数据发送到Elastic Search搜索服务器(集群)\
Kite Dataset Sink写数据到Kite Dataset,试验性质的\
Custom Sink自定义Sink实现

拦截器与选择器

flume本身不限制agent中source、channel和sink的数量,因此flume source可以接收事件,并可以通过配置将事件复制到多个目的地,这使得source通过==channel处理器、拦截器和channel选择器==,写入数据到channel成为可能 每个source都有自己的channel处理器,每次source将数据写入channel,它是通过委派该任务到其channel处理器来完成的,然后,channel处理器将这些事件传到一个或多个source配置的拦截器中, 拦截器是一段代码,可以基于某些它完成的处理来读取事件和修改或删除事件,基于某些标准,如正则表达式,拦截器可以用来删除事件,为事件添加新报头或移除现有的报头等,每个source可以配置成使用多个拦截器,按照配置中定义的顺序被调用,将拦截器的结果传递给链的下一个单元,这就是所谓的责任链的设计模式,一旦拦截器处理完事件,拦截器链返回的事件列表传递到channel列表,即通过channel选择器为每个事件选择channel。  source可以通过处理器-拦截器-选择器路由写入多个channel,channel选择器的决定每个事件必须写入到source附带的哪个channel的组件。因此拦截器可以用来插入或删除事件中的数据,这样channel选择器可以应用一些条件在这些事件上,来决定事件必须写入哪些channel,channel选择器可以对事件应用任意过滤条件,来决定每个事件必须写入哪些channel,以及哪些channel是必须的或可选的。  写入到必需的channel失败将会导致channel处理器抛出channelexception,表明source必须重新重试该事件,而未能写入可选channel失败仅仅忽略它,一旦写出事件,处理器会对source指示成功状态,可能发送确认给发送该事件的系统,并继续接受更多的事件。

Sink组

sink运行器运行一个sink组,sink组可含有一个或多个sink,如果组中只存在一个sink,那么没有组将更有效率,sink运行器仅仅是一个询问sink组来处理下一批事件的线程,每个sink组有一个sink处理器,处理器选择组中的sink之一去处理下一个事件集合,每个sink只能从一个channel获取数据,尽管多个sink可以从同一个channel获取数据,选定的sink从channel中接收事件,并将事件写入到下一阶段或最终目的地。

 Sink组可实现负载均衡与故障转移。

因为每个Avro Sink对Avro Source保持持续开放的连接,拥有写入到相同Agent的多个Sink会增加更多的socket连接,且在多层时Agent上占据更多的资源,对相同Agent增加大量Sink之前必须谨慎考虑。