NingG +

Flume 1.6.0 梳理

几点:

Flume简介

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

Tips:

ad-hoc方案:没有中心控制节点,每个节点都可以用户收集、转发数据。

Flume 1.6.0新特性

完整的Flume 1.6.0升级的新特性参考Flume 1.6.0 release page,几个典型的新特性:

还有几个:

会陆续尝试上述的新特性,Flume 1.6.0的版本说明,参考:Flume 1.6.0 release page.

Flume内部机制

从下面几个方面来说:

相关术语

Flume Agent内部以Flume Event形式传递数据,具体内部由Source、Channel、Sink多线程相互协调进行。

Flume Event

Flume Event,由 byte[] bodyMap<String, String> Headers构成,是Flume Agent内数据流转的基本单元。

Flume中Event对应的源代码如下:

package org.apache.flume;

/*
 * Basic representation of a data object in Flume.
 * Provides access to data as it flows through the system.
 */
public interface Event {

  /*
   * Returns a map of name-value pairs describing the data stored in the body.
   */
  public Map<String, String> getHeaders();
  public void setHeaders(Map<String, String> headers);

  /*
   * Returns the raw byte array of the data contained in this event.
   */
  public byte[] getBody();
  public void setBody(byte[] body);

}

Flume Agent

Flume Agent,本质就是一个JVM进程,提供了Flume内部Source、Channel、Sink线程的运行环境。

具体:

Tips:

Source 与 Sink 之间是异步进行的,Event在Channel进行缓存。

核心概念:Interceptor

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

核心概念:Channel Selector

channel selectors:用于设定Source中Event送入哪个Channel,通常是依照Event中的Headers下的具体属性,来决定Event送入哪个Channel,channel selectors通常有 3 种类型:

核心概念:Sink Processor

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

内部结构

单个Flume Agent的内部结构:

多级Flume Agent构成拓扑:

利用channel selectors指定分发Event:

包含各个核心概念的Flume Agent内部结构:

可靠性

几点:

参考来源

Top