Flume学习笔记(一)Flume 组成架构

Flume学习笔记(一)Flume 组成架构

前言

​ 本文主要记录我在学习 Flume 过程中的一些知识的整理与记录,预计会做成一个系列来梳理一下 Flume 中的知识,本篇的主要内容为 Flume 的组成架构,文中如有疏漏与不足欢迎指正!

一、Flume 是什么

​ Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume 基于流式架构,灵活简单。其可以不断的监听数据源来将新产生的数据搬迁至目标,如将新产生的log 日志数据写入 HDFS。

二、Flume 组成架构

​ Flume 的组成架构图如下:

Flume学习笔记(一)Flume 组成架构_第1张图片

  1. Agent

    Agent 是一个 JVM 进程,其由三部分组成 Source,Channel,Sink。

    Agent 以事件(event)的方式将数据从源头送往目的地。

  2. Source

    Source 是负责接受数据至 Agent,Flume 本身自带了非常多的 Source,让其能够处理各种来源和各种格式的日志数据,当然用户也可以自定义 Source 来满足使用需求。

  3. Sink

    Sink 负责将数据写入目的地,其不断的轮询 Channel 中是否有新的数据并批量的搬移,Sink 可以将数据直接写入文件存储系统,也可以将数据发往另一个 Flume Agent,在实际应用中 Flume 经常与 Kafka 进行对接,因此 Sink 也可以直接将数据发送给 Kafka。与 Source 相同 Flume 本身也提高了非常多的 Sink 以供用户向数据发往各种各样的目的地,当然用户也可以自定义 Sink 来满足使用需求。

  4. 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 低。

  5. Event

    Flume 的传输单元,Flume 以 事件(Event)的形式将数据从源头送至目的地,Event 由 Header 和 Body 俩部分组成,Header 存放事件的头信息,其内部数据为 K-V 的键值对形式,Body 存放数据本体,其内部为字节(Byte)数组。
    在这里插入图片描述

三、总结

  1. Flume 运行后为一个叫 Agent 的 JVM 进程,其能将数据以 Event 的形式从数据源搬迁至目的地。
  2. Flume 的三个重要组件为 Source,Channel,Sink
    1. Source 接收各种数据来源的数据并写入 Channel
    2. Sink 通过轮询的方式判断 Channel 中是否有新数据并批量的从 Channel 中移除然后写入目的地
    3. Channel 位于 Source 与 Sink 之间起到了缓冲区的作用,允许 Source 与 Sink 的处理速率不同
      于 Source 与 Sink 之间起到了缓冲区的作用,允许 Source 与 Sink 的处理速率不同
  3. Flume 的传输数据单位为 Event,其由两部分组成 Header 和 Body,Header 记录了 Event 的一些头信息而 Body 记录的是数据本身。

你可能感兴趣的:(Flume,大数据)