flume 1.7组件概述与列表

时间:2020-12-16 08:18:44

转载请注明原地址:http://blog.csdn.net/m0_37739193/article/details/77570046


Apache版flume-1.7.0源码下载地址:http://archive.apache.org/dist/flume/1.7.0/apache-flume-1.7.0-src.tar.gz

一、Source列表:

Component Interface(组件接口) Type Alias(类型别名) Implementation Class(实现类)
org.apache.flume.Source avro org.apache.flume.source.AvroSource
org.apache.flume.Source netcat org.apache.flume.source.NetcatSource
org.apache.flume.Source seq org.apache.flume.source.SequenceGeneratorSource
org.apache.flume.Source exec org.apache.flume.source.ExecSource
org.apache.flume.Source syslogtcp org.apache.flume.source.SyslogTcpSource
org.apache.flume.Source multiport_syslogtcp org.apache.flume.source.MultiportSyslogTCPSource
org.apache.flume.Source syslogudp org.apache.flume.source.SyslogUDPSource
org.apache.flume.Source spooldir org.apache.flume.source.SpoolDirectorySource
org.apache.flume.Source http org.apache.flume.source.http.HTTPSource
org.apache.flume.Source taildir org.apache.flume.source.taildir.TaildirSource
org.apache.flume.Source thrift org.apache.flume.source.ThriftSource
org.apache.flume.Source jms org.apache.flume.source.jms.JMSSource
org.apache.flume.Source - org.apache.flume.source.kafka.KafkaSource
org.apache.flume.Source - org.apache.flume.source.avroLegacy.AvroLegacySource
org.apache.flume.Source - org.apache.flume.source.thriftLegacy.ThriftLegacySource
org.apache.flume.Source - org.apache.flume.source.StressSource
org.apache.flume.Source - org.apache.flume.source.twitter.TwitterSource
org.apache.flume.Source - org.example.MySource
org.apache.flume.Source - org.apache.flume.source.scribe.ScribeSource

简要说明:
1、Avro Source:支持Avro协议(实际上是Avro RPC),内置支持
2、Netcat Source:监控某个端口,将流经端口的每一个文本行数据作为Event输入
3、Sequence Generator Source:序列生成器数据源,生产序列数据
4、Exec Source:基于Unix的command在标准输出上生产数据
5、Syslog Sources:读取syslog数据,产生Event,支持UDP和TCP两种协议
6、Spooldir Source:监控指定目录内数据变更
7、HTTP Source:基于HTTP POST或GET方式的数据源,支持JSON、BLOB表示形式
8、Taildir Source:1.7增加的新组件。tail监控目录下匹配上正则表达式的的所有文件,并实现了断点续传。更像是Spooldir和Exec的超强结合版
9、Thrift Source:支持Thrift协议,内置支持
10、JMS Source:从JMS系统(消息、主题)中读取数据,该Source目前只在ActiveMQ中测试。
11、Kafka Source:从kafka Topic中读取数据
12、Legacy Sources:兼容老的Flume OG中Source(0.9.x版本),支持Avro和Thrift两种协议
13、Stress Source:压力测试用。
14、Twitter 1% firehose Source:通过API持续下载Twitter数据,试验性质
15、Custom Source:自定义Source
16、Scribe Source:另一种类型的摄取系统(官网的解释,不是很懂,网上关于这个Source的资料也很少)



二、Channel列表:

Component Interface(组件接口) Type Alias(类型别名) Implementation Class(实现类)
org.apache.flume.Channel memory org.apache.flume.channel.MemoryChannel
org.apache.flume.Channel jdbc org.apache.flume.channel.jdbc.JdbcChannel
org.apache.flume.Channel file org.apache.flume.channel.file.FileChannel
org.apache.flume.Channel - org.apache.flume.channel.kafka.KafkaChannel
org.apache.flume.Channel SPILLABLEMEMORY org.apache.flume.channel.SpillableMemoryChannel
org.apache.flume.Channel - org.apache.flume.channel.PseudoTxnMemoryChannel
org.apache.flume.Channel - org.example.MyChannel

简要说明:
1、Memory Channel:用内存做channel,优点是速度最快,容易配置;缺点是,可靠性最差,因为一旦flume进程挂了内存中还未出来的数据也就没了;
2、JDBC Channel:Event数据存储在数据库中,目前的JDBC Channel支持嵌入式Derby。主要是为了数据持久化,并且可恢复的特性。
3、Kafka Channel:apache下一个版本(1.6)将会带来一个新的组件KafKaChannel,顾名思义就是使用kafka做channel,当然在CDH5.3版本已经存在这个channel。
4、File Channel:用本地文件做channel,优点是可靠性最高,数据都存在磁盘文件中,进程挂了重启后还会断点续传;缺点是速度最慢;
5、Spillable Memory Channel:中和memory channel和file channel,本质上是一个file channel,但是优先存储在内存中,内存满了之后再溢出到磁盘,优点是兼顾上面俩的优点;同样缺点也兼顾了;
6、Pseudo Transaction Channel:只是用于单元测试并不是意味着生产使用
7、Custom Channel:是对channel接口的实现。需要在classpath中引入实现类和相关的jar文件。这Channel对应的type是该类的完整路径



三、Sink列表:

Component Interface(组件接口) Type Alias(类型别名) Implementation Class(实现类)
org.apache.flume.Sink hdfs org.apache.flume.sink.hdfs.HDFSEventSink
org.apache.flume.Sink logger org.apache.flume.sink.LoggerSink
org.apache.flume.Sink avro org.apache.flume.sink.AvroSink
org.apache.flume.Sink thrift org.apache.flume.sink.ThriftSink
org.apache.flume.Sink irc org.apache.flume.sink.irc.IRCSink
org.apache.flume.Sink file_roll org.apache.flume.sink.RollingFileSink
org.apache.flume.Sink null org.apache.flume.sink.NullSink
org.apache.flume.Sink hbase org.apache.flume.sink.hbase.HBaseSink
org.apache.flume.Sink asynchbase org.apache.flume.sink.hbase.AsyncHBaseSink
org.apache.flume.Sink elasticsearch org.apache.flume.sink.elasticsearch.ElasticSearchSink
org.apache.flume.Sink hive org.apache.flume.sink.hive.HiveSink
org.apache.flume.Sink - org.apache.flume.sink.solr.morphline.MorphlineSolrSink
org.apache.flume.Sink - org.apache.flume.sink.kite.DatasetSink
org.apache.flume.Sink - org.apache.flume.sink.kafka.KafkaSink
org.apache.flume.Sink - org.example.MySink

简要说明:
1、HDFS Sink:将数据写入HDFS中。目前,它支持HDFS的文本和序列文件格式,以及支持两个文件类型的压缩。支持将所用的时间、数据大小、事件的数量为操作参数,对HDFS文件进行关闭(关闭当前文件,并创建一个新的)。它还可以对事源的机器名(hostname)及时间属性分离数据,即通过时间戳将数据分布到对应的文件路径
2、Logger Sink:数据写入日志文件
3、Avro Sink:数据被转换成Avro Event,然后发送到配置的RPC端口上
4、Thrift Sink:数据被转换成Thrift Event,然后发送到配置的RPC端口上
5、IRC Sink:从channel中取得信息传到IRC Server
6、File Roll Sink:存储数据到本地文件系统,他有个滚动间隔的设置,设置多长时间去生成文件(默认是30秒)
7、Null Sink:丢弃从channel接收的所有数据
8、HBase Sink:数据写入hbase数据库
补充:Hbase Sink支持写数据到安全的Hbase。为了将数据写入安全的Hbase,用户代理运行必须对配置的table表有写权限。主要用来验证对KDC的密钥表可以在配置中指定。在Flume Agent的classpath路径下的Hbase-site.xml文件必须设置到Kerberos认证。
9、AsyncHBase Sink:异步的HBase Sink,可见速度是比前者快的,但是不支持往Secure Hbase写数据
10、ElasticSearch Sink:数据发送到Elastic Search搜索服务器(集群)
11、Hive Sink:数据写入Hive
12、Morphline Solr Sink:数据发送到Solr搜索服务器(集群)
13、Kite Dataset Sink:写数据到Kite Dataset,试验性质的
14、Kafka Sink:把数据写入Kafka Topic中
15、Custom Sink:自定义Sink



四、Channel Selector(选择器)列表:

Component Interface(组件接口) Type Alias(类型别名) Implementation Class(实现类)
org.apache.flume.ChannelSelector replicating org.apache.flume.channel.ReplicatingChannelSelector
org.apache.flume.ChannelSelector multiplexing org.apache.flume.channel.MultiplexingChannelSelector
org.apache.flume.ChannelSelector - org.example.MyChannelSelector

简要说明:
1、Replicating Channel Selector (default):会将source过来的events发往所有channel
2、Multiplexing Channel Selector:可以选择该发往哪些channel
3、Custom Channel Selector:自定义选择器



五、Sink Processors(处理器)列表:

Component Interface(组件接口) Type Alias(类型别名) Implementation Class(实现类)
org.apache.flume.SinkProcessor default org.apache.flume.sink.DefaultSinkProcessor
org.apache.flume.SinkProcessor failover org.apache.flume.sink.FailoverSinkProcessor
org.apache.flume.SinkProcessor load_balance org.apache.flume.sink.LoadBalancingSinkProcessor
org.apache.flume.SinkProcessor -  

简要说明:
1、Default Sink Processor:接收单一的Sink,不强制用户为Sink创建Processor
2、Failover Sink Processor(故障转移):工作原理是将连续失败sink分配到一个池中,在那里被分配一个冷冻期,在这个冷冻期里,这个sink不会做任何事。一旦sink成功发送一个event,sink将被还原到live池中。在这配置中,需要为所有的sink分配优先级,所有的优先级数字必须是唯一的,这个得格外注意,若没有设置优先级则按照sink被声明的顺序来决定优先级。此外,failover time的上限可以通过maxpenalty属性来进行设置。
补充:maxpenalty为失败的Sink最大的退避时间(单位:毫秒)(退避算法(退避算法为我们在解决重试某项任务的时候,提供了一个比较好的等待思想。),参考:http://qiuqiang1985.iteye.com/blog/1513049)
3、Load balancing Sink Processor(负载均衡):它维护了一个active sinks的索引列表,列表中fenb的sinks的负载必须是分布式的。通过round_robin (轮询)或 random(随机)选择机制实现了分布式负载。选择机制默认为round_robin ,也可通过设置重载。还可以通过集成AbstractSinkSelector类来实现用户自己的选择机制,自定义选举类须继承AbstractSinkSelector。
4、官网上说目前自定义processors还不支持。(Custom sink processors are not supported at the moment.)



六、Interceptors(拦截器)列表:

Component Interface(组件接口) Type Alias(类型别名) Implementation Class(实现类)
org.apache.flume.interceptor.Interceptor timestamp org.apache.flume.interceptor.TimestampInterceptor$Builder
org.apache.flume.interceptor.Interceptor host org.apache.flume.interceptor.HostInterceptor$Builder
org.apache.flume.interceptor.Interceptor static org.apache.flume.interceptor.StaticInterceptor$Builder
org.apache.flume.interceptor.Interceptor regex_filter org.apache.flume.interceptor.RegexFilteringInterceptor$Builder
org.apache.flume.interceptor.Interceptor regex_extractor org.apache.flume.interceptor.RegexFilteringInterceptor$Builder
org.apache.flume.interceptor.Interceptor search_replace org.apache.flume.interceptor.SearchAndReplaceInterceptor$Builder
org.apache.flume.interceptor.Interceptor - org.apache.flume.sink.solr.morphline.UUIDInterceptor$Builder
org.apache.flume.interceptor.Interceptor - org.apache.flume.sink.solr.morphline.MorphlineInterceptor$Builder

简要说明:
1、Timestamp Interceptor:在event的header中添加一个key叫:timestamp,value为当前的时间戳。这个拦截器在sink为hdfs时很有用
2、Host Interceptor:在event的header中添加一个key叫:host,value为当前机器的hostname或者ip
3、Static Interceptor:可以在event的header中添加自定义的key和value
4、Search and Replace Interceptor:用于将events中的正则匹配到的内容做相应的替换
5、Regex Filtering Interceptor:通过正则来清洗或包含匹配的events
6、Regex Extractor Interceptor:RegexExtractorInterceptor作为一个Interceptor实现类可以根据一个正则表达式匹配event body来提取字符串,并使用serializers把字符串作为header的值

思考:官网给的实现类是org.apache.flume.interceptor.RegexFilteringInterceptor$Builder,但为什么不是org.apache.flume.interceptor.RegexExtractorInterceptor$Builder呢?!
7、UUID Interceptor:用于在每个events header中生成一个UUID字符串
8、Morphline Interceptor:该拦截器使用Morphline对每个events数据做相应的转换。关于Morphline的使用,可参考http://kitesdk.org/docs/current/morphlines/morphlines-reference-guide.html



七、Event Serializers(序列化器)列表:

Component Interface(组件接口) Type Alias(类型别名) Implementation Class(实现类)
org.apache.flume.serialization.EventSerializer$Builder text org.apache.flume.serialization.BodyTextEventSerializer$Builder
org.apache.flume.serialization.EventSerializer$Builder avro_event org.apache.flume.serialization.FlumeEventAvroEventSerializer$Builder
org.apache.flume.serialization.EventSerializer$Builder - org.apache.flume.sink.hdfs.AvroEventSerializer$Builder
org.apache.flume.serialization.EventSerializer$Builder - org.example.MyEventSerializer$Builder

简要说明:file_roll sink和hdfs sink都支持EventSerializer接口
1、Body Text Serializer:把事件的body部分写入到输出流中而不需要任何转换或者修改。事件的header将直接被忽略
2、“Flume Event” Avro Event Serializer:把事件序列化到一个Avro容器文件中。使用的模式和RPC Avro机制使用到的处理flume事件的机制一样。这个序列化器继承自AbstractAvroEventSerializer类。
3、Avro Event Serializer:具体也不知道和上面那个有啥区别,有点懵逼。。。。。
4、自定义序列化器



八、其他组件列表:

Component Interface(组件接口) Type Alias(类型别名) Implementation Class(实现类)
org.apache.flume.channel.file.encryption.KeyProvider$Builder jceksfile org.apache.flume.channel.file.encryption.JCEFileKeyProvider
org.apache.flume.channel.file.encryption.KeyProvider$Builder - org.example.MyKeyProvider
org.apache.flume.channel.file.encryption.CipherProvider aesctrnopadding org.apache.flume.channel.file.encryption.AESCTRNoPaddingProvider
org.apache.flume.channel.file.encryption.CipherProvider - org.example.MyCipherProvider
  - org.apache.flume.clients.log4jappender.Log4jAppender
  - org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender

说明:这些组件不是很常用并且网上的资料也很少,这里就不做简要说明了。



详细的参数配置还请参考官网:https://flume.apache.org/FlumeUserGuide.html