zoukankan      html  css  js  c++  java
  • flume

    (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)也不好。扇出过
    大一般是因为缺乏中间层次,应该适当增加中间层次的模块。扇出太小时可以把下级模块进一步分解成若干个子功能模块,或者合并到它的上级模块中去。
    设计良好的软件结构,通常顶层扇出比较大,中间扇出小,底层模块则有大扇入
  • 相关阅读:
    Python学习总结之三 -- 优雅的字符串
    Python学习总结之二 -- 数据类型
    Python学习总结之一 -- 基础篇
    JavaWeb学习总结第三篇--走进JSP页面元素
    JavaWeb学习总结第二篇--第一个JavaWeb程序
    JavaWeb学习总结第一篇--初识JavaWeb
    三俊马 站立会议04
    三俊马 站立会议03
    三俊马 站立会议02
    三俊马 站立会议01
  • 原文地址:https://www.cnblogs.com/Hei-po/p/6912409.html
Copyright © 2011-2022 走看看