大数据-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

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

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

shell 复制代码
h122 /opt/software/

上传后进行解压

shell 复制代码
cd /opt/software
tar zxvf apache-flume-1.9.0-bin.tar.gz -C ../servers/
cd ../servers
ls

环境变量

修改配置文件

shell 复制代码
vim /etc/profile

写入如下的内容:

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

写入的内容如下图: 刷新配置文件即可。

配置文件

shell 复制代码
cd $FLUME_HOME/conf
mv flume-env.sh.template flume-env.sh
vim flume-env.sh

JAVA_HOME 配置进去,防止出错。

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

配置的结果如下图: 至此!Flume的安装和配置已经完成!

相关推荐
加密社几秒前
Solana 开发实战:Rust 客户端调用链上程序全流程
开发语言·后端·rust
袋鼠云数栈3 分钟前
AI Infra 运维实践:DeepSeek 部署运维中的软硬结合
大数据·运维·数据库·数据中台·数栈
YGGP27 分钟前
吃透 Golang 基础:Goroutine
后端·golang
天天摸鱼的java工程师1 小时前
如何实现一个红包系统,支持并发抢红包?
后端
稳妥API1 小时前
Gemini 2.5 Pro vs Flash API:正式版对比选择指南,深度解析性能与成本平衡 - API易-帮助中心
后端
深栈解码1 小时前
OpenIM 源码深度解析系列(十一):群聊系统架构与业务设计
后端
trow1 小时前
Spring 手写简易IOC容器
后端·spring
山城小辣椒1 小时前
spring-cloud-gateway使用websocket出现Max frame length of 65536 has been exceeded
后端·websocket·spring cloud
天天摸鱼的java工程师1 小时前
谈谈你对 AQS(AbstractQueuedSynchronizer)的理解?
后端
鸡窝头on1 小时前
Spring Boot 多 Profile 配置详解
spring boot·后端