大数据 -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
开源 ETLLogStash
应用程序日志、事件的传输、处理、管理和搜索的平台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
使用 wegt 下载,或者 你现在好传到服务器上。我传到了 h122 机器上。
上传后进行解压
环境变量
修改配置文件
写入如下的内容:
写入的内容如下图:

刷新配置文件即可。
配置文件
把 JAVA_HOME
配置进去,防止出错。
配置的结果如下图:

至此!Flume 的安装和配置已经完成!
版权声明: 本文为 InfoQ 作者【武子康】的原创文章。
原文链接:【http://xie.infoq.cn/article/3e61e42537c5a2f9fc6961962】。文章转载请联系作者。
评论