zoukankan      html  css  js  c++  java
  • FLUME NG的基本架构

    Flume简介

    Flume 是一个cloudera提供的 高可用高可靠,分布式的海量日志收集聚合传输系统。原名是 Flume OG (original generation),但随着 FLume 功能的扩展,Flume OG 代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点暴露出来,尤其是在 Flume OG 的最后一个发行版本 0.94.0 中,日志传输不稳定的现象尤为严重,为了解决这些问题,2011 年 10 月 22 号,cloudera 完成了 Flume-728,对 Flume 进行了里程碑式的改动:重构核心组件、核心配置以及代码架构,重构后的版本统称为 Flume NG(next generation,改动的另一原因是将 Flume 纳入 apache 旗下,cloudera Flume 改名为 Apache Flume)。

    FLUME NG

    1、NG 只有一种角色的节点:代理节点(agent)。

    2、agent 节点的组成也发生了变化。Flume NG 的 agent 由 source、sink、Channel 组成。

    flume ng 节点组成图:

     

    多 Agent 并联下的架构图:

    Flume 的特性

    flume 支持在日志系统中定制各类数据发送方,用于收集数据;同时支持对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。

    flume 的数据流由事件(Event)贯穿始终。事件是 Flume 的基本数据单位,它携带日志数据并且携带有头信息,这些 Event 由 Agent 外部的 Source 生成,当 Source 捕获事件后会进行特定的格式化,然后 Source 会把事件推入(单个或多个) Channel 中。可以把 Channel 看作是一个缓冲区,它将保存事件直到 Sink 处理完该事件。

    Sink 负责持久化日志或者把事件推向另一个 Source。

    Flume 具备高可靠性

    当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:

    1、end-to-end:收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。

    2、Store on failure:这也是scribe采用的策略,当数据接收方crash崩溃时,将数据写到本地,待恢复后,继续发送。

    3、Best effort:数据发送到接收方后,不会进行确认。

    Flume 架构组成和核心概念

    # client: 生产数据的地方,运行在一个独立的线程。

    # event: 生产的数据,可以是日志记录、 avro 对象等,如果是文本文件通常是一行记录。

    # agent: flume 核心组件,flume 以 Agent 为最小的独立运行单位。一个 agent 就是一个 jvm, agent 又是由 source, channel, sink 等构建而成。

    agent 由 source, channel, sink 等构建而成:

    3.1 Source:从 Client 收集数据,传递给 Channel

    不同的 source,可以接受不同的数据格式,比如监视外部源–目录池(spooling directory)数据源,可以监控指定文件夹中的新文件变化,如果目录中有文件产生,就会立刻读取其内容。source 组件可以处理各种格式的日志数据,eg:avro Sources、thrift Sources、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、自定义。

    Avro Source:支持Avro协议(实际上是Avro RPC),内置支持|

    Thrift Source:支持Thrift协议,内置支持

    Exec Source:基于Unix的command在标准输出上生产数据

    JMS Source:从JMS系统(消息、主题)中读取数据

    Spooling Directory Source:监控指定目录内数据变更

    Twitter 1% firehose Source:通过API持续下载Twitter数据,试验性质

    Netcat Source:监控某个端口,将流经端口的每一个文本行数据作为Event输入

    Sequence Generator Source:序列生成器数据源,生产序列数据

    Syslog Sources:读取syslog数据,产生Event,支持UDP和TCP两种协议

    HTTP Source:基于HTTP POST或GET方式的数据源,支持JSON、BLOB表示形式

    Legacy Sources:兼容老的Flume OG中Source(0.9.x版本)

    详细参考官网:http://flume.apache.org/FlumeUserGuide.html#flume-sources

    3.2、Channel:连接 sources 和 sinks

    有点像一个队列,是一个存储池,接收 source 的输出,直到有 sink 消费掉 channel 中的数据,channel 中的数据直到进入下一个 channel 或者进入 sink 才会被删除,当 sink 写入失败后,可以自动重启,不会造成数据丢失。临时存放的数据可以存放在memory Channel、jdbc Channel、file Channel、自定义。

    Memory Channel:Event数据存储在内存中

    JDBC Channel:Event数据存储在持久化存储中,当前Flume Channel内置支持Derby

    File Channel:Event数据存储在磁盘文件中

    Spillable Memory Channel:Event数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件

    Pseudo Transaction Channel:测试用途

    Custom Channel:自定义Channel实现

    详细参考官网:http://flume.apache.org/FlumeUserGuide.html#flume-channels

    3.3、Sink:从Channel收集数据,运行在一个独立线程

    用于把数据发送到目的地的组件目的地包括 hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定义。

    详参考官网:http://flume.apache.org/FlumeUserGuide.html#flume-sinks

    flume可以支持

    1、多级 flume的 agent,(即多个 flume 可以连成串,上一个 flume 可以把数据写到下一个 flume 上)

    2、支持扇入(fan-in):source 可以接受多个输入

    3、扇出(fan-out):sink 可以输出到多个目的地

    3.4、其他几个组件

    Interceptor:作用于Source,按照预设的顺序在必要地方装饰和过滤events。

    Channel Selector:允许Source基于预设的标准,从所有Channel中,选择一个或多个Channel

    Sink Processor:多个Sink可以构成一个Sink Group。Sink Processor可以通过组中所有Sink实现负载均衡;也可以在一个Sink失败时转移到另一个。

  • 相关阅读:
    C# 线程之间切换
    工厂方法(创建型)
    单例模式(创建型)
    HTTP请求超时
    命令模式
    Asp.Net Core EF Migrations(二)
    Asp.Net Core EF Migrations
    Vue父子组件之间的通讯(学习笔记)
    数组的方法(笔记)
    Vue-router入门
  • 原文地址:https://www.cnblogs.com/eflypro/p/11428036.html
Copyright © 2011-2022 走看看