四、flume架构
一个简单的flume架构包含三个重要的组件,他们协同工作,并且以实时的方式将源数据传输到目的地。
- source:用于监听流式数据或事件,将其写入到channel
- channel:一个存储数据的流水线,数据存储在其中直到被其他组件取走
- sink:用于从channal中获取事件并进一步处理或者持久化到数据存储。失败则重试
还有一些众所周知的结构
- 分布式数据流水线(上面结构可一个个的连接起来)
- 扇出(一个source将数据传给多个channel)
- 扇入(多source写入一个channel)
在此不做详细介绍了。
flume架构中的三层设计
- Agent层:与需要传输数据的数据源连接在一起
- Collector层:手机Agent层数据
- Storage层:接收Collector层数据并存储起来
高级flume架构:就是多了一个FlumeMaster可以使用ThriftApi控制集群配置
Flume的可靠性级别:
- End-to-end:只要发送端是活跃的状态,就一定可以达到另一端
- store on failure :只在接收方agent发生故障时才保存
- Best-effort:最弱的,不经写入磁盘而直接被转发给下一跳,也不依赖下一个Agent的收条。
五、Flume事件--流式数据
事件结构比较简单
Event Header:一组键值对,map形式存储,
Event Payload:这部分是一个字节数组,以Byte形式存储,主体信息默认大小32KB(可后期配置)
六、Flume Agent
Agent是flume的最小部署单位。由source,channel,sink为主要组件。
可以设置的Agent的主要配置有:
多跳式(多Agent数据流)
合并式(融合的数据流)
倍增式
七、FlumeSource
Flume Agent可以有多个Source,但是必须最少有一个才能工作。source有sourcerunner管理,主要控制线程方面和执行模型。
事件驱动
轮询
八、Flume Channel
channel是flumeAgent用来将数据从source传输到sink的一种机制。
channel分为如下两类:
1、in-memory(内存中,队列)
2、Durable(持久化,文件,jdbc,kafka)
九、FlumeSink
和source的情况一样,sink由sinkrunner管理,管理线程和执行模型
与source不同的是,sink的执行模式是轮询。
目前有多种现成的sink可用
- HDFS
- Hbase
- AsyncHbase
- Hive
- Kafka
- Null和Looger
十、Flume配置
Flume配置规则:
- 每个Agent至少包含一个channel
- 每个Source至少包含一个channel
- 每一个sink有且仅有一个channel
- 应该给Agent命名,只有已命名的Agent才会被加载
- 在已命名的Agent当中,只有活跃的组件才会 被加载
- 定义任何组件时都应该定义它的类型