Hei-po  

(1)Apache Fulme 是一个分布式的,可靠、高可用的系统。它用来从许多不同的源收集、聚合、传输大量的日志数据到一个集中的数据仓库。

(2)ApacheFlume 的使用不仅仅局限在日志数据的收集。

(3)Flume 是Apache基金会的一个顶级项目。

(4)两个版本 0.9.x简称og  和1.x 简称ng

从og到ng经过了重构,并且ng不能兼容og

(5)Flume支持过滤器。使用正则表达式。

(6)Flume可以支持多级flume的agent,支持扇入(fan-in)、扇出(fan-out)

Flume介绍

 

Flume是Cloudera提供的日志收集系统。Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。 
Flume是一个分布式、可靠、高可用的海量日志采集、聚合和传输的系统。

Flume的架构主要有一下几个核心概念:

  • Event:一个数据单元,带有一个可选的消息头
  • Flow:Event从源点到达目的点的迁移的抽象
  • Client:操作位于源点处的Event,将其发送到Flume Agent
  • Agent:一个独立的Flume进程,包含组件Source、Channel、Sink
  • Source:用来消费传递到该组件的Event
  • Channel:中转Event的一个临时存储,保存有Source组件传递过来的Event
    • MemoryChannel 可以实现高速的吞吐,但是无法保证数据的完整性。
    • MemoryRecoverChannel 在官方文档的建议上已经建义使用FileChannel来替换。
    • FileChannel保证数据的完整性与一致性。在具体配置FileChannel时,建议FileChannel设置的目录和程序日志文件保存的目录设成不同的磁盘,以便提高效率。
    • File Channel 是一个持久化的隧道(channel),它持久化所有的事件,并将其存储到磁盘中。因此,即使 Java 虚拟机当掉,或者操作系统崩溃或重启,再或者事件没有在管道中成功地传递到下一个代理(agent),这一切都不会造成数据丢失。Memory Channel 是一个不稳定的隧道,其原因是由于它在内存中存储所有事件。如果 java 进程死掉,任何存储在内存的事件将会丢失。另外,内存的空间收到 RAM大小的限制,而 File Channel 这方面是它的优势,只要磁盘空间足够,它就可以将所有事件数据存储到磁盘上。美团在两者性能缺陷上设计出一个dualchannel 来进行两者使用时的转换。
  • Sink:从Channel中读取并移除Event,将Event传递到Flow Pipeline中的下一个Agent(如果有的话)
  • 将日志采集系统系统分为三层:Agent 层,Collector 层和 Store 层,其中 Agent 层每个机器部署一个进程,负责对单机的日志收集工作;Collector 层部署在中心服务器上,负责接收Agent层发送的日志,并且将日志根据路由规则写到相应的 Store 层中;Store 层负责提供永久或者临时的日志存储服务,或者将日志流导向其它服务器。

 

Flume特点

 

  • Reliability:数据可靠性,包括End-to-end,Store on failure和Best effort
  • Scalability:Flume的3大组件collector、master和storage tier都是可伸缩的
  • Manageability:利用ZooKeeper和gossip,保证配置数据的一致性、高可用,同时多Master
  • Extensibility:基于Java,用户可以为Flume添加各种新的功能。

 

 

Flume架构

其中最重要的抽象是data flow,描述了数据从产生、传输、处理并最终写入目标的一条路径。 
上图实线是data flow。 
Agent用于采集数据,agent是flume中产生数据流的地方,同时,agent会将产生的数据流传输到collector。对应的,collector用于对数据进行聚合,往往产生一个更大的流。

 

 

其中,收集数据有2种主要工作模式: 
- Push Sources:外部系统会主动地将数据推送到Flume中,如RPC、syslog 
- Polling Sources:Flume到外部系统中获取数据,一般使用轮询的方式,如text和exec 
注意,在Flume中,agent和collector对应,而source和sink对应。 
Source和sink强调发送、接受方的特性(如数据格式、编码等),而agent和collector关注功能。

===================================================================

在软件设计中,扇入和扇出的概念是指应用程序模块之间的层次调用情况。
按照结构化设计方法,一个应用程序是由多个功能相对独立的模块所组成。
扇入:是指直接调用该模块的上级模块的个数。扇入大表示模块的复用程序高。
扇出:是指该模块直接调用的下级模块的个数。扇出大表示模块的复杂度高,需要控制和协调过多的下级模块;但扇出过小(例如总是1)也不好。扇出过
大一般是因为缺乏中间层次,应该适当增加中间层次的模块。扇出太小时可以把下级模块进一步分解成若干个子功能模块,或者合并到它的上级模块中去。
设计良好的软件结构,通常顶层扇出比较大,中间扇出小,底层模块则有大扇入

 

posted on 2017-05-27 12:59  Hei-po  阅读(456)  评论(0编辑  收藏  举报