转载请注明原地址: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