写点什么

大数据 -17 Flume 分布式日志收集 实时采集引擎 Source Channel Sink 串行复制负载均衡

作者:武子康
  • 2025-06-20
    美国
  • 本文字数:2520 字

    阅读完需:约 8 分钟

大数据-17 Flume 分布式日志收集 实时采集引擎 Source Channel Sink 串行复制负载均衡

点一下关注吧!!!非常感谢!!持续更新!!!

🚀 AI 篇持续更新中!(长期更新)

目前 2025 年 06 月 13 日更新到:AI 炼丹日志-28 - Audiblez 将你的电子书 epub 转换为音频 mp3 做有声书,持续打造实用 AI 工具指南!📐🤖

💻 Java 篇正式开启!(300 篇)

目前 2025 年 06 月 11 日更新到:Java-44 深入浅出 Nginx - 底层进程机制 Master Worker 机制原理 常用指令 MyBatis 已完结,Spring 已完结,深入浅出助你打牢基础!

📊 大数据板块已完成多项干货更新(300 篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!目前 2025 年 06 月 13 日更新到:大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT 案例 详解


章节内容

上一节我们完成了:


  • HiveServer2 的介绍和配置安装

  • 修改 core-size hdfs-site 实现集群的启动

  • Beeline 简单上手

  • HCatalog 简单上手

背景介绍

这里是三台公网云服务器,每台 2C4G,搭建一个 Hadoop 的学习环境,供我学习。


  • 2C4G 编号 h121

  • 2C4G 编号 h122

  • 2C2G 编号 h123


Flume 简介

Flume 是一个分布式高可靠高可用的海量日志采集、聚合、传输的系统。Flume 支持在日志系统中定制各类数据发送方,用于采集数据。Flume 提供对数据进行简单处理,并写到各种数据接收方的能力。


简单概括: Flume 是实时采集日志的数据采集引擎。它有三个重要的组件概念:


  • Source

  • Channel

  • Sink


他们之间的关系如下图表示:


核心概念

Flume 的设计基于“流(Flow)”的思想,一个完整的数据流由多个组件协作完成,主要包括:

Event

  • Flume 中传输的数据单元,称为事件(Event),由两部分组成:

  • Header(头部,键值对)

  • Body(内容,字节数组,通常是日志文本)

Agent

  • 是 Flume 的运行实例,负责数据的接收、处理和输出。

  • 一个 Agent 包含三个关键组件:

  • Source(源):用于接收数据(如:syslog、HTTP、exec、Spooling Directory 等)

  • Channel(通道):用于在 Source 和 Sink 之间缓存数据(如:内存通道、文件通道、Kafka 通道)

  • Sink(汇):将数据写入目标系统(如:HDFS、HBase、Kafka)

Interceptor

  • 插入在 Source 和 Channel 之间的“拦截器”,用于处理或修改 Event,比如:

  • 增加 Header

  • 内容过滤

  • 数据清洗

Channel Selector & Sink Processor

  • 当一个 Source 对接多个 Channel,需要用 Channel Selector 决定分发逻辑。

  • Sink Processor 则可以实现负载均衡、容错等高级功能(比如负载轮询、故障转移等)。

Flume 的数据流模式

Flume 支持多种拓扑结构来实现灵活的数据流传输:


  • 单 Agent 模式:简单稳定,适合单机收集日志。

  • 多 Agent 模式(级联):

  • 上游 Agent 的 Sink 向下游 Agent 的 Source 发数据。

  • 用于跨节点、跨数据中心传输。

常见 Source

  • exec:执行 shell 命令并读取标准输出(如 tail -F)

  • spooldir:监控目录中新文件(适合脱机日志收集)

  • netcat:基于 TCP 的简易调试型 source

  • avro:跨 Agent 通信的默认方式

  • http:接收 HTTP POST 请求

常见 Sink

  • hdfs:写入 HDFS,支持滚动写入、压缩等

  • logger:打印日志,主要用于调试

  • file_roll:写入本地文件,类似日志归档

  • avro:用于向下游 Agent 发送 Event

  • kafka:支持将日志写入 Kafka 供实时分析使用

Flume 特点

  • 分布式:Flume分布式集群部署,扩展性好

  • 可靠性好:当节点出现故障时,日志能够被传送到其他节点上而不会丢失

  • 易用性:Flume 配置使用繁琐,对使用人员专业度要求高

  • 实时采集:Flume采集流模式对数据进行实时采集

类似工具

  • DataX 阿里异构数据源同步工具

  • Kettle 开源 ETL

  • LogStash 应用程序日志、事件的传输、处理、管理和搜索的平台

  • Scribe FaceBook 开源的日志收集系统

使用场景

  • 网站日志收集(如 Nginx、Tomcat 日志)

  • 移动应用埋点日志归集

  • 服务器操作系统日志集中式处理

  • 配合 Hadoop 系统做离线分析

Flume 架构

Agent

本质上一个JVM进程,该 JVM 进程控制Event数据流从外部日志生产者传输到目的地是下一个Agent。一个完整的Agent中包含了三个完整的组件:Source、Channel、Sink。Source是指数据的来源方式,Channel是一个数据缓冲池,Sink定义了数据输出的方式和目的地。

Source

负责接受数据到 Flume Agent 的组件。Source组件可以处理各种类型各种格式的日志数据。

Channel

为了Source和Sink之间的缓冲,Channel 允许 Source 和 Sink 运作在不同的速率上。


Channel线程安全的,可以同时处理多个Source写入操作以及多个SInk的读取操作。


常见的Channel如下:


  • Memory Channel 是内存中的队列。Memory Channel 在允许数据丢失的情况下使用

  • File Channel 将所有事件都写到磁盘。

Sink

不断地轮询Channel 中的事件并且批量的移除它们,将这些事件批量写入存储或者索引系统,或者被发送到另一个 Agent。

Event

是 Flume 定义的是一个数据流传输的最小单位

Flume 拓扑

串行模式


多个 Flume 结合起来,从最初的 Source 到最终 Sink。此模式不建议过多的 Flume,过多不仅会影响传输速率,而且一旦传输过程中某个节点宕机,会影响整个系统。

复制模式


将事件流向一个或者多个目的地,这种模式将数据源复制到多个Channel中,每个 Channel 都有相同的数据,Sink 可以选择传入不同的目的地。

负载均衡


多个 Sink 逻辑上划分到一个Sink组,Flume 将数据发送到不同的 Sink 上。

Flume 内部原理


  • Source 接受事件,交给其 Channel 处理

  • 处理器通过拦截器 Interceptor,对事件进行处理,比如压缩解码、正则拦截、时间戳

  • 经过拦截的事件再传给 Channel 选择器,将事件写入相应的 Channel。

  • 最后由 Sink 处理各个 Channel 事件。

项目下载

下载 Flume

这里我选择:1.9.0


http://archive.apache.org/dist/flume/
复制代码


使用 wegt 下载,或者 你现在好传到服务器上。我传到了 h122 机器上。


h122 /opt/software/
复制代码


上传后进行解压


cd /opt/softwaretar zxvf apache-flume-1.9.0-bin.tar.gz -C ../servers/cd ../serversls
复制代码

环境变量

修改配置文件


vim /etc/profile
复制代码


写入如下的内容:


# flumeexport FLUME_HOME=/opt/servers/apache-flume-1.9.0-binexport PATH=$PATH:$FLUME_HOME/bin
复制代码


写入的内容如下图:



刷新配置文件即可。

配置文件

cd $FLUME_HOME/confmv flume-env.sh.template flume-env.shvim flume-env.sh
复制代码


JAVA_HOME 配置进去,防止出错。


export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
复制代码


配置的结果如下图:



至此!Flume 的安装和配置已经完成!

发布于: 刚刚阅读数: 4
用户头像

武子康

关注

永远好奇 无限进步 2019-04-14 加入

Hi, I'm Zikang,好奇心驱动的探索者 | INTJ / INFJ 我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。 坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。

评论

发布
暂无评论
大数据-17 Flume 分布式日志收集 实时采集引擎 Source Channel Sink 串行复制负载均衡_大数据_武子康_InfoQ写作社区