Flume的简介
大数据处理流程
- 数据采集
- 数据存储
- 数据清洗
- 数据分析
- 数据显示
Flume是一个分布式的、可靠的、高可用的的服务,用于收集,聚合和移动大量的日志数据。
Flume的体系结构
Flume运行的核心是Agent,Flume是以Agent为最小的独立运行单位。一个agent就是一个JVM。它是一个完整的数据收集工具,含有三个核心组件,分别是source、channel、sink。通过这些组件,Event可以从一个地方流向另一个地方。
核心概念
agent
flume最核心的角色就是agent,flume日志采集系统是由一个个的agent连接起来的数据传输通道。agent就是一个独立的守护进程JVM,它负责从数据源接收苏剧,并发送到下一个目的地。
source
从数据发生器接收数据,并将接收的数据以Event的形式传递给一个或多个channel。Flume提供了多种数据接收的方式,比如Avro,Thrift。
channel
channel是一种短暂的存储容器,它从source处接收到event格式数据后进行缓存,直到被消费掉。它在source和sink之间起到了桥梁的作用,channel是一个完整的事务,这一点保证了数据在收发时候的一致性,并可以和任意数量的source和sink连接。
sink
sink将数据存储到存储器中,比如HBase和HDFS,它从channels消费数据(events)并将其传递给目标,目标地可以是另一个sink,也可能是HDFS,HBase。
Event
数据在Flume内部都是以Event封装的形式存在的,因此source组件在获取到原始数据后,需要封装成Event后发送到channel中,然后sink从channel取出Event后,根据配置要求再转成其他的形式进行数据输出。
Event封装的对象主要包含两部分:Headers和Body;
Headers是一个集合Map类型,用于存储元数据(如标志,描述等)
Body就是一个字节数组,装载具体的数据内容。
transaction
Flume的事务机制,类似于数据库的事务机制。
Flume使用独立的事务分别从source到channel,以及从channel到sink的event传递。在任何时刻,Event至少在一个Channel上是完整有效的(基于事务机制保障)。
interceptor
拦截器,拦截工作在source组件之后,source产生的event会被传入的拦截器根据需要进行拦截。
Flume组件详解
Source | Desc |
---|---|
Avro Source | 通过监听一个网络端口来接收数据,而且接收的数据必须是使用Avro序列化框架序列化后的数据 |
Thrift Source | 监听Thrift端口,并从外部Thrift客户端流接收事件 |
Exec Source | 启动一个用户所指定的Linux Shell命令;采集linux Shell命令的标准输出,作为采集到的数据,转为event写入Channel |
Spooling Directory Source | 监视一个指定的文件夹,如果文件夹下有没采集过的新文件,则将这些采集这些新文件中的数据,并转成Event写入channel;注意,spooling目录中的文件必须是不可变的,而且是不能重名的 |
Taildir source | 监视指定目录下的一批文件,只要某个文件中有新写入的行,就会被tail。它会记录每一个文件所tail到的位置,记录一个指定的positionfile保存目录中,格式为json。 |
Kafka Source | 使用kafka Consumer连接kafka读取数据,然后转成Event,写入到channel |
NetCat Source | 启动一个socket服务,监听一个端口,将端口上收到的数据,转成Event写入channel |
Http Source | 通过HTTP post/get来接收数据,通常get用于测试 |
Channel | Desc |
---|---|
Memory Channel | event存储在内存中,对于需要高吞吐量而且可以容忍数据丢失的情况下,可以选择 |
JDBC Channel | event被持久化到数据库 |
File Channel | event被缓存到本地磁盘文件中,可靠性高,不会丢失 |
Kafka Channel | agent利用Kafka作为channel数据缓存,kafka channel在应用时可以没有source |
Sink | Desc |
---|---|
HDFS Sink | 数据被最终发到HDFS上,可以生成text文件或者Sequence文件,而且支持压缩;支持生成文件的周期性roll机制 |
Hive Sink | 可将text或json数据直接存储到hive分区表 |
Logger Sink | 数据输出到日志中,通常用于debug |
Flume高阶
Flume是如何保证数据不丢失的,以及具体在哪个环节使用了事务?
1,At-Least-Once
2,At-Most-Once
3,Exectly-Once
Flume采用的是At-Least-Once策略
Flume的transaction是有生命周期的,分别是start,commit,rollback和close。
Flume监控
Flume调优