Flume 原理介绍
Flume架构
数据流模型
- Flume源使用外部源(如web服务器)传递给它的事件。外部源以目标Flume源可识别的格式向Flume发送事件。例如,Avro Flume源可用于从Avro接收器发送事件的流中的Avro客户端或其他Flume代理接收Avro事件。可以使用Thrift Flume源从Thrift Sink或Flume Thrift Rpc客户端接收事件,或使用由Flume Thrift协议生成的任何语言编写的Thrift客户端来定义类似的流。当Flume源接收到事件时,它将其存储到一个或多个通道中。channel是一个被动存储,它将事件保存到sink,直到flume channel消耗掉为止。文件通道就是一个例子——它由本地文件系统支持。sink将事件从channel中移除,并将其放入HDFS之类的外部存储库(通过Flume HDFS接收器)中,或将其转发到流中下一个Flume代理(下一跳)的Flume源。给定代理内的源和sink与channel中暂存的事件异步运行
复杂流
- Flume允许用户在事件到达最终目的地之前通过多个代理构建多跳流。它还允许扇入和扇出流、上下文路由和失败跳的备份路由(故障转移)
可靠性
-
事件在每个代理上的一个通道中进行转移。然后将事件传递到流中的下一个代理或终端存储库(如HDFS)。只有将事件存储在下一个代理的通道或终端存储库中后,才会从通道中删除这些事件。这就是Flume中的单跳消息传递语义如何提供流的端到端可靠性。
-
Flume使用事务性方法来保证事件的可靠传递。源和汇分别将放置在通道提供的事务中或由通道提供的事务提供的事件的存储/检索封装在事务中。这样可以确保事件集在流中的各个点之间可靠地传递。在多跳流的情况下,来自上一跳的接收器和来自下一跳的源都运行其事务,以确保数据安全地存储在下一跳的通道中。