大数据-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的安装和配置已经完成!

相关推荐
间彧3 分钟前
从开发到生产,如何将Docker Compose项目平滑迁移到Kubernetes?
后端
间彧9 分钟前
如何结合CI/CD流水线自动选择正确的Docker Compose配置?
后端
间彧10 分钟前
在多环境(开发、测试、生产)下,如何管理不同的Docker Compose配置?
后端
间彧11 分钟前
如何为Docker Compose中的服务配置健康检查,确保服务真正可用?
后端
间彧15 分钟前
Docker Compose和Kubernetes在编排服务时有哪些核心区别?
后端
间彧21 分钟前
如何在实际项目中集成Arthas Tunnel Server实现Kubernetes集群的远程诊断?
后端
brzhang1 小时前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent
前端·后端·架构
科技峰行者1 小时前
微软与OpenAI联合研发“Orion“超大规模AI模型:100万亿参数开启“科学家AI“新纪元
大数据·人工智能·microsoft
拓端研究室1 小时前
2025母婴用品双11营销解码与AI应用洞察报告|附40+份报告PDF、数据、绘图模板汇总下载
大数据·人工智能
GOATLong1 小时前
git使用
大数据·c语言·c++·git·elasticsearch