Flume核心组件介绍

69 阅读5分钟

1、Flume简介

Flume is a distributed, reliable, and available service for efficiently

collecting, aggregating, and moving large amounts of log data. It has a simple

and flexible architecture based on streaming data flows. It is robust and fault

tolerant with tunable reliability mechanisms and many failover and recovery

mechanisms. It uses a simple extensible data model that allows for online

analytic application.

Flume 是一个分布式、可靠、高可用的海量日志聚合系统,支持在系统中定制各类数据发送方,用于收集数据,同时,Flume 提供对数据的简单处理,并写到各种数据接收方的能力

1、 Apache Flume 是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统,和 Sqoop 同属于数据采集系统组件,但是 Sqoop 用来采集关系型数据库数据,而 Flume 用 来采集流动型数据。

2、 Flume 名字来源于原始的近乎实时的日志数据采集工具,现在被广泛用于任何流事件数 据的采集,它支持从很多数据源聚合数据到 HDFS。

3、 一般的采集需求,通过对 flflume 的简单配置即可实现。Flume 针对特殊场景也具备良好 的自定义扩展能力,因此,flflume 可以适用于大部分的日常数据采集场景。

4、 Flume 最初由 Cloudera 开发,在 2011 年贡献给了 Apache 基金会,2012 年变成了 Apache 的顶级项目。Flume OG(Original Generation)是 Flume 最初版本,后升级换代成 Flume NG(Next/New Generation)。

5、 Flume 的优势:可横向扩展、延展性、可靠性。

2、核心组件

agent:能独立执行一个数据收集任务的JVM进程
source : 一个agent中的用来跟数据源对接的服务
channel : agent内部的一个中转组件
sink : 一个agent中的用来跟数据目的地对接的服务
event: 消息流转的一个载体/对象
header body

常见source的类型
Avro source :接收网络端口中的数据
exec source: 监听文件新增内容 tail -f
spooldir source :监控文件夹的,如果这个文件夹里面的文件发送了变化,就可以采集
Taildir source: 多目录多文件实时监控

常见的channel的类型
memory : 内存中 , 快 , 但不安全
file : 相对来说安全些,但是效率低些
jdbc: 使用数据库进行数据的保存

常见的sink的类型
logger 做测试使用
HDFS 离线数据的sink 一般
Kafka 流式数据的sink

以上仅仅是常见的一些,官网中有完整的。

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

Flume 以 agent 为最小的独立运行单位

一个 agent 就是一个 JVM

单 agent 由 Source、Sink 和 Channel 三大组件构成。

图片.png

图片.png

Flume的三大组件:

Event

Event 是 Flume 数据传输的基本单元。
Flume 以事件的形式将数据从源头传送到最终的目的地。
Event 由可选的 header 和载有数据的一个 byte array 构成。
载有的数据度 flflume 是不透明的。
Header 是容纳了 key-value 字符串对的无序集合,key 在集合内是唯一的。
Header 可以在上下文路由中使用扩展。

Client

Client 是一个将原始 log 包装成 events 并且发送他们到一个或多个 agent 的实体
目的是从数据源系统中解耦 Flume
在 Flume 的拓扑结构中不是必须的

Agent
一个 Agent 包含 source,channel,sink 和其他组件。
它利用这些组件将 events 从一个节点传输到另一个节点或最终目的地。
Agent 是 flflume 流的基础部分。
Flume为这些组件提供了配置,声明周期管理,监控支持。

Agent 之 Source

Source 负责接收 event 或通过特殊机制产生 event,并将 events 批量的放到一个或多个
包含 event 驱动和轮询两种类型
不同类型的 Source
与系统集成的 Source:Syslog,Netcat,监测目录池
自动生成事件的 Source:Exec
用于 Agent 和 Agent 之间通信的 IPC source:avro,thrift
Source 必须至少和一个 channel 关联

Agent 之 Channel

Channel 位于 Source 和 Sink 之间,用于缓存进来的 event
当 sink 成功的将 event 发送到下一个的 channel 或最终目的,event 从 channel 删除
不同的 channel 提供的持久化水平也是不一样的
Memory Channel:volatile(不稳定的)
File Channel:基于 WAL(预写式日志 Write-Ahead Logging)实现
JDBC Channel:基于嵌入式 database 实现
Channel 支持事务,提供较弱的顺序保证
可以和任何数量的 source 和 sink 工作

Agent 之 Sink

Sink 负责将 event 传输到下一级或最终目的地,成功后将 event 从 channel 移除
不同类型的 sink ,比如 HDFS,HBase

多Agent串联

图片.png

在收集数据的过程中,可以让多个 agent 串联起来,形成一条 event 数据线,进行传输,但是注意的是:相邻两个 agent 的前一个 agent 的 sink 类型要和后一个 agent 的 source 类型一 致。

多Agent合并串联 图片.png

多个 agent 串联,并联成一个复杂的 数据收集架构。反映了 flflume 的部署灵活。并且针对关键节点,还可以进行高可用配置。

多路复用 图片.png 一份数据流,可以被复制成多份数据流,交给多个不同组件进行处理。一般用于一边永久存储一边进行计算。

完毕!