Flume学习笔记(一)Flume 组成架构
Flume学习笔记(一)Flume 组成架构
前言
本文主要记录我在学习 Flume 过程中的一些知识的整理与记录,预计会做成一个系列来梳理一下 Flume 中的知识,本篇的主要内容为 Flume 的组成架构,文中如有疏漏与不足欢迎指正!
一、Flume 是什么
Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume 基于流式架构,灵活简单。其可以不断的监听数据源来将新产生的数据搬迁至目标,如将新产生的log 日志数据写入 HDFS。
二、Flume 组成架构
Flume 的组成架构图如下:
-
Agent
Agent 是一个 JVM 进程,其由三部分组成 Source,Channel,Sink。
Agent 以事件(event)的方式将数据从源头送往目的地。
-
Source
Source 是负责接受数据至 Agent,Flume 本身自带了非常多的 Source,让其能够处理各种来源和各种格式的日志数据,当然用户也可以自定义 Source 来满足使用需求。
-
Sink
Sink 负责将数据写入目的地,其不断的轮询 Channel 中是否有新的数据并批量的搬移,Sink 可以将数据直接写入文件存储系统,也可以将数据发往另一个 Flume Agent,在实际应用中 Flume 经常与 Kafka 进行对接,因此 Sink 也可以直接将数据发送给 Kafka。与 Source 相同 Flume 本身也提高了非常多的 Sink 以供用户向数据发往各种各样的目的地,当然用户也可以自定义 Sink 来满足使用需求。
-
Channel
Channel 处于 Source 与 Sink 之间,起到了缓冲的作用,由于 Channel 的存在可以允许 Sink 写入数据的速率与 Source 获取数据的速率不同。此外,Channel 是线程安全的,可以同时处理多个 Source 和 Sink 的读取与写入。但有一点需要注意,可以多个 Source 往一个 Channel 写,也可以一个Channel 发往多个 Sink (通过负载均衡或故障转移的方式),但是不能多个 Channel 发往一个 Sink。
Flume 自带俩种 Channel,Memory Channel 和 File Channel
Memory Channel 是内存中的队列,其效率较高,但是缺点是当发送程序死亡,机器宕机等情况时会导致数据的丢失。
File Channel 将事件数据写入磁盘,因此无需担心数据丢失的风险,但是效率较 Memory 低。
-
Event
Flume 的传输单元,Flume 以 事件(Event)的形式将数据从源头送至目的地,Event 由 Header 和 Body 俩部分组成,Header 存放事件的头信息,其内部数据为 K-V 的键值对形式,Body 存放数据本体,其内部为字节(Byte)数组。
三、总结
- Flume 运行后为一个叫 Agent 的 JVM 进程,其能将数据以 Event 的形式从数据源搬迁至目的地。
- Flume 的三个重要组件为 Source,Channel,Sink
- Source 接收各种数据来源的数据并写入 Channel
- Sink 通过轮询的方式判断 Channel 中是否有新数据并批量的从 Channel 中移除然后写入目的地
- Channel 位于 Source 与 Sink 之间起到了缓冲区的作用,允许 Source 与 Sink 的处理速率不同
于 Source 与 Sink 之间起到了缓冲区的作用,允许 Source 与 Sink 的处理速率不同
- Flume 的传输数据单位为 Event,其由两部分组成 Header 和 Body,Header 记录了 Event 的一些头信息而 Body 记录的是数据本身。