介绍
Apache的Flume是一个分布式的,质量可靠,可有效地收集,汇总和来自许多不同来源的大量日志数据到集中的数据存储系统。目前,Flume是在Apache项目孵化。
架构
数据流模型
Flume事件被定义为一个数据流的单位,有一个字节的有效载荷和一个可选字符串属性。Flume Agent是一个(JVM进程,连接数据源及数据源的下一个目的地。
Flume处理Web服务器的外部源的事件。外部源发送事件按照Flume源可以识别的格式。 例如:Avror的Flume 源,可以用来接收Avro的客户端或Flume代理。当Flume源接收到一个事件,它存储到一个或多个通道。通道是一个被动的存储,直到被Flume Sink处理。 JDBC的通道就是一个例子 - 它使用文件系统支持数据库。Sink从通道获得事件 ,放到像HDFS的外部库(通过Flume HDFS Sink)或转发到下Flume代理(下一跳)。在代理内部,Source与Sink异步传输通过通道。
复杂流
Flume到达最终目的地之前,允许用户建立多跳流活动,通过多个代理。它还允许扇入和扇出流量,内容路由和备份路由以防失败(故障转移)。
可靠性
在每个代理中都会存在事件,事件在通道中。事件在流中存在,然后传送到下一个代理或终端库(如HDFS)。只有在下一个代理通道或终端库存储才从通道中删除事件。这是一个单跳消息传递语义在Flume中提供端至端的流的可靠性。Flume使用事务的方式,以保证可靠的交付事件。源和Sink的封装在一个事务中存储/检索,分别放置在通道中。这将确保事件集可靠地传递从点到点。在一个多跳的流中,前一跳及源的下一跳的情况下都有其事物的运行,以确保数据的安全存储通道。
可恢复
事件存储在通道中,可以从失败中恢复。Flume支持持久的JDBC通道,这是一个关系数据库支持。还有一个内存通道,它只是存储在内存中的队列,这使得速度更快,但仍留在内存通道不能恢复。