核心概念
web
Event算法
Clientapache
Agentapi
Sources、Channels、Sinks缓存
其余组件:Interceptors、Channel Selectors、Sink Processor负载均衡
核心概念:Event
spa
Event是Flume数据传输的基本单元。flume以事件的形式将数据从源头传送到最终的目的。Event由可选的hearders和载有数据的一个byte array构成。.net
载有的数据对flume是不透明的代理
Headers是容纳了key-value字符串对的无序集合,key在集合内是惟一的。日志
Headers能够在上下文路由中使用扩展
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
核心概念: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失败时转移到另外一个。