Flume
介绍
-
Flume是什么
是一个分布式的高效的海量日志数据收集工具。
是一个分布式、可靠、可用的高效的日志数据收集、聚合、移动的工具。 -
Hadoop总体的业务流程
- 特点以及优势
- Fulme可以将数据存储到任何集中的存储器中,比如HDFS、HBase
- 可以对数据生产者和数据接收容器之间做个均衡,保证二者的平衡。
- Flume的管道是基于事务的,保证了数据在传输和接收时的一致性。
- Flume是可靠的、容错性高的、可升级的、易管理的并且可定制的。
工作原理
数据流模型
Event(封装数据的对象)
官网这样介绍Event:
An Event
is a unit of data that flows through a Flume agent. The Event
flows from Source
to Channel
to Sink
, and is represented by animplementation of the Event
interface. An Event
carries a payload (byte
array) that is accompanied by an optional set of headers (string attributes).
翻译:
Event是一个Flume agent传递数据的基本单位。
Event从Source流入到Channel再流入到Sink,是通过Event接口的实现类体现的。
Event是由一个Headers和一个字节数组组成。
可以理解为,Event就是Agent的传输数据的数据类型,将收到的数据封装起来。往往正式工作的是一个实现了Event接口的对象。而这个对象是由一个头信息(描述信息)和一个字节数组(传输的数据)组成的。
由上可得下面这样得模型
Agent
一个Agent是Flume分布式系统最核心的角色,Flume采集系统就是由一个个agent所连接起来的。
而一个Agent是由一个Source、一个或多个Channel和Sink组成的。
Source
数据接受组件
接受来自外部的数据,然后封装格式化
成Event形式传输个一个或者多个Channel。
Flume提供了很多Source的实现来应对各种输入数据类型,并且可以自定义自己的Source。
Channel
一个临时存放Event的地方。存放的形式可以是存在内存中,也可以存在磁盘上。直到Sink处理完这个Event.
Sink
从Channel中取出Event然后将其中的数据写入到别的Agent中或者是文件系统、数据库中。
Flume 部署模式
单一模式
多代理
往往我们接收的数据格式不能一步转换到我们想存储的格式的时候采用这样的模式。
聚合
当我们的服务多的是,一个Agent负责一个服务的日志采集,多个服务如果同时向HDFS写的时候往往不好统一,比如名称难以规范。这时可以通过这样的模式,用一个Agent来统一处理其他Agent Sink出来的数据,然后统一格式写到目标文件系统或者数据库中。
负载均衡
多路复用
当我们的服务产生的数据复杂多样的时候,可以这样做。在一个Agent内部将这些数据分开,然后传输到不同的文件系统上。当然也可以串接Agent再做需要的处理。