大数据知识体系
首页
数据结构与算法
  • JVM
  • Java
  • Scala
  • Python
设计模式
  • MySQL
  • Redis
  • HDFS
  • HBase
  • ClickHouse
  • ElasticSearch
  • Iceberg
  • Hudi
  • Spark
  • Flink
  • Hive
  • Yarn
  • Zookeeper
  • Maven
  • Git
  • 数据仓库
  • 用户画像
  • 指标体系
数据治理
关于
首页
数据结构与算法
  • JVM
  • Java
  • Scala
  • Python
设计模式
  • MySQL
  • Redis
  • HDFS
  • HBase
  • ClickHouse
  • ElasticSearch
  • Iceberg
  • Hudi
  • Spark
  • Flink
  • Hive
  • Yarn
  • Zookeeper
  • Maven
  • Git
  • 数据仓库
  • 用户画像
  • 指标体系
数据治理
关于
  • Kafka

    • kafka
    • Kafka 面试题
  • Flume

    • Flume 概述
      • Flume 是什么
      • Flume 架构
      • Flume 内部原理
      • Flume 数据流模型
        • 简单模型
        • 多路复用模型
        • 聚合模型
        • 负载均衡模型
    • Flume 安装
    • Flume Source
    • Flume Sink
    • Flume Channel
    • Flume 拦截器
    • Flume 监控
    • Flume 面试题
  • Datax

    • datax
  • Canal

    • canal
  • 采集传输
  • Flume
Will
2021-12-29
目录

Flume 概述

# Flume 是什么

Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。官网地址 (opens new window)。

Flume 主要包含三个组件:Source、Channel 和 Sink。它的主要流程就是把数据从 Source 收集过来,再将收集到的数据送到指定 Sink。为了保证输送的过程一定成功,在送到 Sink 之前,会先缓存数据到 Channel,确保数据到达 Sink 之后再删除缓存数据。

# Flume 架构

Flume 架构

从上图中可以看出,Flume 中最核心的是 Agent,Agent 里又包含了 Source、Channel 和 Sink 三个组件。

  • Agent:本质上是一个 JVM 进程,该 JVM 进程控制 Event 数据流从外部日志生产者那里传输到目的地(或者是下一个 Agent)。一个完整的 Agent 中包含了三部分:Source、Channel 和 Sink。
  • Source:Source 是负责接收数据到 Flume Agent 的组件。Source 组件可以处理各种类 型、各种格式的日志数据,包括 Avro、Exec、Spooldir、Netcat 等。
  • Channel:Channel 是位于 Source 和 Sink 之间的组件。可以理解为 Channel 是 Source 和 Sink 之间的一个缓冲区,当 Source 采集数据的速率大于 Sink 的输出速度时,Channel 可以提供一个临时的落脚点。Channel 是线程安全的,可以同时处理几个 Source 的写入操作和几个 Sink 的读取操作。
  • Sink:不断地轮询 Channel 中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个 Flume Agent。Sink 是完全事务性的。在从 Channel 批量删除数据之前,每个 Sink 用 Channel 启动一个事务。批量事件一旦成功写出到存储系统或下一个 Flume Agent,Sink 就利用 Channel 提交事务。事务一旦被提交,该 Channel 从自己的内部缓冲区删除事件。Sink 组件包括 HDFS、Logger、Avro、File、HBase 等。

在整个数据流中最基本的传输单元叫做 Event,Event 包含 Header 和 Body 两部分,Header 用来存储 event 的一些属性(K-V 结构),Body 用于存储传输的数据。

# Flume 内部原理

Flume 原理

  1. 每个 Source 都有自己的 Channel 处理器,每次将 Source 取得的事件写入到 Channel,都要通过 Channel 处理器。然后 Channel 处理器将这些事件,传送到一个或者多个拦截器中和 Channel 选择器中(Channel Selector)。
  2. 拦截器是简单的插入式组件,设置在 Source 和 Source 写入数据的 Channel 之间,Source 接收到的事件在写入到 Channel 之前,拦截器都可以对事件进行拦截。拦截器也有很多类型,如正则表达式的拦截器,时间戳拦截器,可以为事件添加报头,或者移除现有报头等。某个 Source 可以配置成使用多个拦截器,这些拦截器按照配置的顺序依次被调用,这就是所谓的责任链模式。一旦拦截器处理完事件,将事件返回给 Channel 处理器。Channel 处理器又将时间传递给 Channel 选择器。
  3. Channel 选择器是决定每个事件写入哪个 Channel 组件中。Channel 选择器有两种类型:Replicating Channel Selector 和 Multiplexing Channel Selector。Replicating 会将 Source 过来的 Events 发往所有 channel,而 Multiplexing 可以配置发往哪些 Channel。默认是 Replicating Channel Selector。
  4. Channel 的作用在 Source 和 Sink 之间加一层缓冲区,当 Source 生产速度大于 Sink 的消费速度的时候,可以让事件进行短暂停留而不至于让整个链路崩掉。
  5. 事件经过 Channel 之后会被发送到 Sink 处理器,Sink 处理器会选择其中一个 Sink 去处理该事件,并将其发送到下一个阶段。

# Flume 数据流模型

# 简单模型

Flume简单模型

# 多路复用模型

Flume简单模型

# 聚合模型

Flume简单模型

# 负载均衡模型

Flume负载均衡

上次更新: 2023/11/01, 03:11:44

← Kafka 面试题 Flume 安装→

Theme by Vdoing | Copyright © 2022-2023 Will 蜀ICP备2022002285号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式