Flume 1.6.0
关键词: flume-ng、核心概念、Source/Channel/Sink类型
0、Flume-og和Flume-ng分别是什么鬼?
Cloudera:由于Hadoop(开源)深受客户欢迎,很多公司就推出了各自版本的Hadoop,也有一些公司围绕Hadoop开发产品。而Cloudera是Hadoop生态系统中,规模最大、知名度最高的公司。它出售基于Hadoop的软件、也发布自家版本的Hadoop产品(如 Cloudera Hadoop,简称 CDH),帮助订阅客户管理数据。
Cloudera开发的分布式日志收集系统Flume,可以实时地将分布在不同节点、机器上的日志收集到存储系统中。
Flume的初始发行版本
统称为Flume-og(original generation),属于Cloudera;
随着Flume功能扩展,Flume-og代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点,尤其是Flume-og的最后一个发行版本0.94.0日志传输不稳定现象严重。为了解决这些问题,Cloudera对Flume进行了里程碑式的改动:重构核心组件、核心配置、代码架构。
重构后的版本统称为Flume-ng(next generation)
,也就是说,之后的版本都可以叫Flume-ng。也就是 Flume 1.x版本
同时,Apache将Flume纳入旗下,也叫Apache Flume。 注意:ng是完全不兼容og的,ng更像是一个轻量的小工具,非常简单,容易适应各种方式日志收集,并支持failover和负载均衡。
Flume-ng架构图:
总结:它们都只是一个称呼,重点是现在用Flume-ng。
1、flume-ng压缩包(不是源码)结构
源码可查看GitHub-Apache Flume
[root@master apache-flume-1.6.0-bin]# pwd
/usr/local/src/apache-flume-1.6.0-bin
[root@master apache-flume-1.6.0-bin]# tree -Ld 1
.
├── bin
│ ├── flume-ng ----flume-ng启动shell脚本
│ ├── flume-ng.cmd
│ └── flume-ng.ps1
├── conf -----配置文件
│ ├── flume-avro.conf
│ ├── flume-conf.properties.template
│ ├── flume-env.ps1.template
│ ├── flume-env.sh
│ ├── flume-env.sh.template
│ ├── flume-exec.conf
│ ├── flume-netcat.conf
│ └── log4j.properties
├── docs ------文档
├── lib ------各种jar包
└── tools
5 directories
2、几个核心概念
Event:一个数据单元,带有一个可选的消息头。是Flume数据传输的基本单元Flow:Event从源点到达目的点的迁移的抽象Client:操作位于源点处的Event,将其发送到AgentAgent:一个独立的Flume进程,包含组件Source、Channel、Sink
Source:用来消费传递到该组件的EventChannel:中转Event的一个临时存储,保存有Source组件传递过来的EventSink:从Channel中读取并移除Event,将Event传递到Flow Pipeline中的下一个Agent(如果有的话)Interceptor:Source读取event发送到Sink时,在event header中加入一些有用信息、或对event的内容进行过滤,完成初步的数据清洗
4、Source/Channel/Sink-数据类型
source类型说明
channel类型说明
sink类型说明
Avro Source支持Avro协议(实际上是Avro RPC),内置支持Memory ChannelEvent数据存储在内存中HDFS Sink数据写入HDFSThrift Source支持Thrift协议,内置支持JDBC ChannelEvent数据存储在持久化存储中,当前Flume Channel内置支持DerbyLogger Sink数据写入日志文件Exec Source基于Unix的command在标准输出上生产数据,如tail -fFile ChannelEvent数据存储在磁盘文件中Avro Sink数据被转换成Avro Event,然后发送到配置的RPC端口上JMS Source从JMS系统(消息、主题)中读取数据Spillable Memory ChannelEvent数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件Thrift Sink数据被转换成Thrift Event,然后发送到配置的RPC端口上Spooling Directory Source监控指定目录内数据变更Pseudo Transaction Channel测试用途IRC Sink数据在IRC上进行回放Twitter 1% firehose Source通过API持续下载Twitter数据,试验性质Custom Channel自定义Channel实现File Roll Sink存储数据到本地文件系统Netcat Source监控某个端口,将流经端口的每一个文本行数据作为Event输入Null Sink丢弃到所有数据Sequence Generator Source序列生成器数据源,生产序列数据HBase Sink数据写入HBase数据库Syslog Sources读取syslog数据,产生Event,支持UDP和TCP两种协议Morphline Solr Sink数据发送到Solr搜索服务器(集群)HTTP Source基于HTTP POST或GET方式的数据源,支持JSON、BLOB表示形式ElasticSearch Sink数据发送到Elastic Search搜索服务器(集群)Legacy Sources兼容老的Flume og中Source(0.9.x版本)Kite Dataset Sink写数据到Kite Dataset,试验性质的Kafka Source读取Kafka数据Custom Sink自定义Sink实现
Apache Flume 官网 Apache Flume GitHub