Flume 是什么

       Apache Flume是一个高可靠、高可用的分布式的海量日志收集、聚合、传输系统。它能够从不同的日志源採集数据并集中存储。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

Flume也算是Hadoop生态系统的一部分,源于Cloudera,眼下是Apache基金会的顶级项目之中的一个。Flume有两条产品线,0.9.x版本号和1.x版本号。

官网:http://flume.appache.org/

  • 收集、聚合事件流数据的分布式框架
  • 通经常使用于log数据
  • 採用ad-hoc方案。明显长处例如以下:
    • 可靠的、可伸缩、可管理、可定制、高性能
    • 声明式配置,能够动态更新配置
    • 提供上下文路由功能
    • 支持负载均衡和故障转移
    • 功能丰富
    • 全然的可扩展
核心概念

  • Event
  • Client
  • Agent
    • Sources、Channels、Sinks
    • 其它组件:Interceptors、Channel Selectors、Sink Processor
核心概念:Event

Event是Flume传输数据的基本单元。flume以事件的形式将数据从源头传送到终于的目的。Event由可选的hearders和载有数据的一个byte array构成。

  • 载有的数据对flume是不透明的
  • Headers是容纳了key-value字符串对的无序集合。key在集合内是唯一的。

  • Headers能够在上下文路由中使用扩展
[java] view plain copy print ?
  1. public interface Event {  
  2.     public Map<String, String> getHeaders();  
  3.     public void setHeaders(Map<String, String> headers);  
  4.     public byte[] getBody();  
  5.     public void setBody(byte[] body);  
  6. }  
public interface Event {
    public Map<String, String> getHeaders();
    public void setHeaders(Map<String, String> headers);
    public byte[] getBody();
    public void setBody(byte[] body);
}

核心概念:Client

Clinet是一个将原始log包装成events而且发送它们到一个或多个agent的实体。

  • 比如
    • Flume log4j Appender
    • 能够使用Client SDK (org.apache.flume.api)定制特定的Client
  • 目的是从数据源系统中解耦Flume
  • 在flume的拓扑结构中不是必须的

核心概念:Agent

一个Agent包括Sources, Channels, Sinks和其它组件。它利用这些组件将events从一个节点传输到还有一个节点或终于目的。

  • agent是flume流的基础部分。
  • flume为这些组件提供了配置、生命周期管理、监控支持。

核心概念:Source

Source负责接收events或通过特殊机制产生events。并将events批量的放到一个或多个Channels。有event驱动和轮询2种类型的Source

  • 不同类型的Source:
    • 和众所周知的系统集成的Sources: Syslog, Netcat
    • 自己主动生成事件的Sources: Exec, SEQ
    • 用于Agent和Agent之间通信的IPC Sources: Avro
  • Source必须至少和一个channel关联
核心概念:Channel

Channel位于Source和Sink之间,用于缓存进来的events。当Sink成功的将events发送到下一跳的channel或终于目的,events从Channel移除。

  • 不同的Channels提供的持久化水平也是不一样的:
    • Memory Channel: volatile
    • File Channel: 基于WAL(预写式日志Write-Ahead Logging)实现
    • JDBC Channel: 基于嵌入Database实现
  • Channels支持事务
  • 提供较弱的顺序保证
  • 能够和不论什么数量的Source和Sink工作

核心概念:Sink

Sink负责将events传输到下一跳或终于目的。成功完毕后将events从channel移除。

  • 不同类型的Sinks:
    • 存储events到终于目的的终端Sink. 比方: HDFS, HBase
    • 自己主动消耗的Sinks. 比方: Null Sink
    • 用于Agent间通信的IPC sink: Avro
  • 必须作用与一个确切的channel
Flow可靠性

                      【Java】Appache Flume 中文介绍 随笔 第1张

               【Java】Appache Flume 中文介绍 随笔 第2张

  • 可靠性基于:
    • Agent间事务的交换
    • Flow中,Channel的持久特性
  • 可用性:
    • 内建的Load balancing支持
    • 内建的Failover支持
【Java】Appache Flume 中文介绍 随笔 第3张
【Java】Appache Flume 中文介绍 随笔 第4张

核心概念:Interceptor

用于Source的一组Interceptor,依照预设的顺序在必要地方装饰和过滤events。

  • 内建的Interceptors同意添加event的headers比方:时间戳、主机名、静态标记等等
  • 定制的interceptors能够通过内省event payload(读取原始日志)。在必要的地方创建一个特定的headers。
核心概念:Channel Selector

Channel Selector同意Source基于预设的标准,从全部Channel中,选择一个或多个Channel

  • 内建的Channel Selectors:
    • 复制Replicating: event被拷贝到相关的channel
    • 复用Multiplexing: 基于hearder,event被路由到特定的channel
核心概念:Sink Processor

多个Sink能够构成一个Sink Group。一个Sink Processor负责从一个指定的Sink Group中激活一个Sink。

Sink Processor能够通过组中全部Sink实现负载均衡;也能够在一个Sink失败时转移到还有一个。

  • Flume通过Sink Processor实现负载均衡(Load Balancing)和故障转移(failover)
  • 内建的Sink Processors:
    • Load Balancing Sink Processor – 使用RANDOM, ROUND_ROBIN或定制的选择算法
    • Failover Sink Processor 
    • Default Sink Processor(单Sink)
  • 全部的Sink都是採取轮询(polling)的方式从Channel上获取events。这个动作是通过Sink Runner激活的
  • Sink Processor充当Sink的一个代理

    【Java】Appache Flume 中文介绍 随笔 第5张
总结 【Java】Appache Flume 中文介绍 随笔 第6张

【Java】Appache Flume 中文介绍 随笔 第7张


【Java】Appache Flume 中文介绍 随笔 第8张


【Java】Appache Flume 中文介绍 随笔 第9张【Java】Appache Flume 中文介绍 随笔 第10张【Java】Appache Flume 中文介绍 随笔 第11张


【Java】Appache Flume 中文介绍 随笔 第12张【Java】Appache Flume 中文介绍 随笔 第13张【Java】Appache Flume 中文介绍 随笔 第14张【Java】Appache Flume 中文介绍 随笔 第15张

【Java】Appache Flume 中文介绍 随笔 第16张


【Java】Appache Flume 中文介绍 随笔 第17张【Java】Appache Flume 中文介绍 随笔 第18张

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄