开启掘金成长之旅!这是我参与「掘金日新计划 · 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基础架构
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 用来存放该条数据,形式为字节数组。
| Header | Body |
|---|---|
| event(k=v) | (byte array) |