认识Flume

130 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情

在一个完整的大数据处理系统中,除了HDFS、Hive组成分析系统的核心之外,还需要数据采集、结果数据导出、任务调度等不可或缺的辅助系统,而flume就是这样一个存在。

1. Flume介绍

Flume官网:flume.apache.org/

Flume中文官网:flume.liyifeng.org/#

Flume 是Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume 基于流式架构,灵活简单。

Flume分为了两个版本:flume-og(老版本) à flume-ng(新的版本)。

2.Flume基础架构

image.png

2.1Agent

Flume分布式系统中最核心的角色是Agent,Agent 是一个 JVM 进程,它以事件的形式将数据从源头送至目的。

Agent 主要有 3 个部分组成,Source、Channel、Sink。

2.2Source

Source:采集源,用于跟数据源对接,以获取数据。

种类:

TailDir(监控多个文件)、SpoolingDir、Avro(网络传输,多个agent互联)、Exec(linux命令tail -F)、Kafka等。

2.3Channel

Channel:Agent内部的数据传输通道,用于从source读取的数据进行缓冲然后传递到sink。Channel 是线程安全的,可以同时处理几个 Source 的写入操作和几个Sink 的读取操作。

种类: Kafka channel、Memory channel、File channel等。

Memory Channel 是内存中的队列。Memory Channel 在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么 Memory Channel 就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。

File Channel 将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。

2.4Sink

Sink:下沉地,采集数据的传送目的,用于往下一级Agent传递数据或者往最终存储系统传递数据。

种类: HDFS Sink、Kafka Sink、Avro Sink、HBase Sink、Hive Sink等。

2.5Event

传输单元,Flume 数据传输的基本单元,以 Event 的形式将数据从源头送至目的地。

Event 由 Header 和 Body 两部分组成,Header 用来存放该 event 的一些属性,默认为空,存储数据的时候使用KV类型。Body 用来存放该条数据,形式为字节数组。

HeaderBody
event(k=v)(byte array)