zoukankan      html  css  js  c++  java
  • 【Java】Appache Flume 中文介绍

    

    Flume 是什么

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

    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能够在上下文路由中使用扩展
    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可靠性

                          

                   

    • 可靠性基于:
      • Agent间事务的交换
      • Flow中,Channel的持久特性
    • 可用性:
      • 内建的Load balancing支持
      • 内建的Failover支持


    核心概念: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的一个代理


    总结



    Two agents communicating over Avro RPC


    A fan-in flow using Avro RPC to consolidate events in one place


    

查看全文
  • 相关阅读:
    什么是 Hystrix?它如何实现容错?
    什么是 Spring Cloud Bus?我们需要它吗?
    SpringBoot和SpringCloud的区别?
    Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?
    REST 和RPC对比?
    XML技术的作用?
    iHTML 的 form 提交之前如何验证数值文本框的内容全部为数字
    XML常用解析API有哪几种?
    XML的解析方式有哪几种?有什么区别?
    XML文档约束有哪几种?有什么区别?
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10837961.html
  • Copyright © 2011-2022 走看看