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,将其发送到Agent
- Agent:一个独立的Flume进程,包含组件Source、Channel、Sink
- Source:用来消费传递到该组件的Event
- Channel:中转Event的一个临时存储,保存有Source组件传递过来的Event
- Sink:从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 Channel | Event数据存储在内存中 | HDFS Sink | 数据写入HDFS |
Thrift Source | 支持Thrift协议,内置支持 | JDBC Channel | Event数据存储在持久化存储中,当前Flume Channel内置支持Derby | Logger Sink | 数据写入日志文件 |
Exec Source | 基于Unix的command在标准输出上生产数据,如tail -f | File Channel | Event数据存储在磁盘文件中 | Avro Sink | 数据被转换成Avro Event,然后发送到配置的RPC端口上 |
JMS Source | 从JMS系统(消息、主题)中读取数据 | Spillable Memory Channel | Event数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件 | 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实现 |