Flume的理解

Posted chen8023miss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flume的理解相关的知识,希望对你有一定的参考价值。

Flume背景及应用场景

  • Flume是什么?
    • 由Cloudera公司开源;
    • 分布式、可靠、高可用的海量日志采集系统
    • 数据源可定制,可扩展;
    • 数据存储系统可定制,可扩展。
    • 中间件:屏蔽了数据源和数据存储系统的异构性
  • Flume特点
    • 可靠性
      • 保证数据不丢失
    • 可扩展性高性能
      • 各组件数目可扩展

    • - 吞吐率很高,能满足海量数据收集需求
    • 可管理性
      - 可动态增加和删除组件
    • 文档丰富,社区活跃
      - 已成为Hadoop生态系统标配
  • Flume OG和NG两个版本
    • Flume OG
      • OG:“Original Generation”
      • 0.9.x或cdh3以及更早版本
      • 由agent、collector、master等组件构成
    • Flume NG
      • NG:“Next/New Generation”
      • 1.x或cdh4以及之后的版本
      • 由Agent、Client等组件构成
    • 为什么要推出NG版本
      • 精简代码
      • 架构简化

1 Flume OG基本架构

技术图片
技术图片

    • agent
      • 用于采集数据
      • 数据流产生的地方
      • 通常由source和sink两部分组成
        • Source用于获取数据,可从文本文件,syslog,HTTP等获取数据;
        • Sink将Source获得的数据进一步传输给后面的Collector。
        • Flume自带了很多source和sink实现
        • syslogTcp(5140) | agentSink("localhost",35853)
        • tail("/etc/services") | agentSink("localhost",35853)
    • Collector
      • 汇总多个Agent结果
      • 将汇总结果导入后端存储系统,比如HDFS,HBase
      • Flume自带了很多collector实现
        • collectorSource(35853) | console
        • collectorSource(35853) | collectorSink("file:///tmp/flume/collected", "syslog");
        • collectorSource(35853) | collectorSink("hdfs://namenode/user/flume/ ","syslog");
    • Agent与Collector对应关系

           技术图片

    • 可手动指定,也可自动匹配
    • 自动匹配的情况下,master会平衡collector之间的负载

           技术图片

  • Master
    • 管理协调 agent 和collector的配置信息;
    • Flume集群的控制器;
    • 跟踪数据流的最后确认信息,并通知agent;
    • 通常需配置多个master以防止单点故障;
    • 借助zookeeper管理管理多Master。
  • 容错机制设计

     技术图片

    技术图片

2 Flume NG基本架构

技术图片

    • Flume NG核心概念
      • Event
      • Client
      • Agent
        • Source
        • Channel
        • Sink
        • 其他组件:Interceptor、Channel Selector、Sink、Processor
    • Event
      • Event是Flume数据传输的基本单元
      • Flume以事件的形式将数据从源头传送到最终的目的
      • Event由可选的header和载有数据的一个byte array构成。
        • 载有的数据对flume是不透明的
        • Header是容纳了key-value字符串对的无序集合,key在集合内是唯一的。
        • Header可以在上下文路由中使用扩展
    • Client
      • Client是一个将原始log包装成events并且发送它们到一个或多个agent的实体。
      • 目的是从数据源系统中解耦Flume
      • 在flume的拓扑结构中不是必须的
      • Client实例
        • Flume log4j Appender
        • 可以使用Client SDK (org.apache.flume.api)定制特定的Client
    • Agent
      • 一个Agent包含Source, Channel, Sink和其他组件;
      • 它利用这些组件将events从一个节点传输到另一个节点或最终目的;
      • agent是flume流的基础部分;
      • flume为这些组件提供了配置、生命周期管理、监控支持。
    • Agent之Source

     技术图片

      • Source负责接收event或通过特殊机制产生event,并将events批量的放到一个或多个Channel。
      • 包含event驱动和轮询2种类型
      • 不同类型的Source:
        • 与系统集成的Source: Syslog, Netcat
        • 自动生成事件的Source: Exec
        • 用于Agent和Agent之间通信的IPC Source: Avro、Thrift
      • Source必须至少和一个channel关联
    • Agent之Channel与Sink

               技术图片

    • Agent之Channel
      • Channel位于Source和Sink之间,用于缓存进来的event;
      • 当Sink成功的将event发送到下一跳的channel或最终目的,event从Channel移除。
      • 不同的Channel提供的持久化水平也是不一样的:Channel支持事务,提供较弱的顺序保证
        • Memory Channel: volatile
        • File Channel: 基于WAL(预写式日志Write-Ahead Logging)实现
        • JDBC Channel: 基于嵌入Database实现
      • 可以和任何数量的Source和Sink工作
    • Agent之sink
      • Sink负责将event传输到下一跳或最终目的,成功完成后将event从channel移除。
      • 不同类型的Sink:
        • 存储event到最终目的的终端Sink. 比如: HDFS, HBase
        • 自动消耗的Sink. 比如: Null Sink
        • 用于Agent间通信的IPC sink:
      • 必须作用于一个确切的channel
    • 其他几个组件
      • Interceptor
        • 作用于Source,按照预设的顺序在必要地方装饰和过滤events。
      • Channel Selector
        • 允许Source基于预设的标准,从所有Channel中,选择一个或多个Channel。
      • Sink Processor:
        • 多个Sink可以构成一个Sink Group。Sink Processor可以通过组中所有Sink实现负载均衡;也可以在一个Sink失败时转移到另一个。

以上是关于Flume的理解的主要内容,如果未能解决你的问题,请参考以下文章

深入理解海量日志收集利器 Flume

flume应该思考的问题

阿里大数据工程师教你怎样理解Flume

flume架构以及应用理解参考

理解FlumeNG的batchSize和transactionCapacity参数和传输事务的原理

17-ETL工具大数据架构Flume介绍Flume组件介绍