news 2026/4/28 2:12:48

大数据管理与应用系列丛书《大数据平台架构》之第12章 综合实践——日志采集分析系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大数据管理与应用系列丛书《大数据平台架构》之第12章 综合实践——日志采集分析系统

书目信息:《大数据平台架构》
章节:第12章 综合实践之日志采集分析系统
主编:吕欣、黄宏斌
关键词:Nginx日志, Flume Exec Source, Kafka Kraft, Flink YARN Session

文章目录

  • 12.1 系统全局概览
    • 12.1.1 建设背景与目标
    • 12.1.2 核心技术栈
  • 12.2 详细架构设计与数据流
    • 12.2.1 物理部署拓扑
  • 12.3 核心模块深度解析
    • 12.3.1 Web 应用与定制化日志格式
    • 12.3.2 负载模拟 (Locust)
    • 12.3.3 Flume 采集方案:Exec Source + Kafka Sink
    • 12.3.4 Kafka 集群:Kraft 模式革新
    • 12.3.5 Flink 实时计算与 YARN Session
  • 12.4 运行与验证
  • 12.5 本章总结


12.1 系统全局概览

12.1.1 建设背景与目标

在现代互联网架构中,日志数据是系统运维的“黑匣子”。本章通过构建一个端到端的实时日志采集分析系统,模拟了企业级生产环境中的核心需求:

  1. 全链路监控:从用户请求发起,到后端处理,再到数据落盘,实现全流程的数据追踪。
  2. 性能量化:通过分析 Nginx 日志中的时间戳字段,实时计算系统的响应延迟(Latency)和吞吐量(QPS)。
  3. 组件协同:验证 Hadoop 生态圈组件(Flume, Kafka, HDFS, Flink)在分布式环境下的协同工作能力。

12.1.2 核心技术栈

系统选型遵循“高性能、高可用、松耦合”的原则:

  • 数据源Nginx(反向代理与日志生成) +Gunicorn(Python Web容器)。
  • 负载模拟Locust(开源性能测试工具,支持分布式压测)。
  • 数据管道Flume(日志采集) +Kafka(消息缓冲与解耦)。
  • 计算与存储Flink(流式计算) +HDFS(离线归档) +PostgreSQL(指标存储)。

12.2 详细架构设计与数据流

系统的数据流向严格遵循“产生 -> 采集 -> 缓冲 -> 处理 -> 存储”的逻辑。

图12-1 日志采集分析系统总体架构图

12.2.1 物理部署拓扑

系统部署在 5 台虚拟机上,通过YARNKraft实现了资源的分布式调度。

节点 (Hostname)IP 地址部署组件角色说明
web01192.168.122.180Nginx, Gunicorn, Flume, Locust业务与采集节点:产生日志并初步采集。
hadoop01192.168.122.169HDFS NameNode, YARN RM, ZKHadoop主节点:管理存储与计算资源。
hadoop02192.168.122.170DataNode, NM,Kafka Broker计算与消息节点:Kafka 采用 Kraft 模式。
hadoop03192.168.122.171DataNode, NM,Kafka Broker同上,构成 Kafka Quorum。
hadoop04192.168.122.172DataNode, NM,Kafka Broker,FlinkFlink 提交节点:通过 YARN Client 提交作业。
db01192.168.122.181PostgreSQL数据服务节点:存储最终分析报表。

图12-2 物理部署拓扑图

12.3 核心模块深度解析

12.3.1 Web 应用与定制化日志格式

为了能够分析系统性能,必须对 Nginx 的默认日志格式进行改造。

  • 业务逻辑:Web 应用提供中文分词 API。用户 POST 文本,服务器返回分词结果。
  • Nginx 配置 (nginx.conf)
    教材中定义了名为main的日志格式,增加了关键的时间度量字段:
    • $request_time:请求处理总时间(秒)。
    • $upstream_response_time:后端(Gunicorn)响应时间。
      这使得后续 Flink 能够计算出最大/最小/平均请求时长

12.3.2 负载模拟 (Locust)

使用Locust模拟真实用户的高并发访问。

  • 压测脚本:定义了UserBehavior类,模拟用户随机生成整数和选取语料文本的行为。
  • 启动参数
    • --users 100:模拟 100 个并发用户。
    • --spawn-rate 10:每秒启动 10 个用户,直到达到 100。
      这种渐进式的加压方式能生成平滑增长的日志流量,便于观察系统瓶颈。

12.3.3 Flume 采集方案:Exec Source + Kafka Sink

Flume Agent (a1) 部署在web01节点,充当“搬运工”。

  • Source (r1): 类型为exec
    • 命令:tail -F /var/log/nginx/access.log。使用-F保证日志文件轮转(Log Rotation)后仍能持续追踪。
  • Channel (c1): 类型为memory
    • 权衡:内存通道吞吐量极高,但存在断电丢失数据的风险。在日志分析场景中,少量数据丢失通常是可接受的。
  • Sink (k1): 类型为kafka
    • kafka.topic: 设置为web01_nginx_log
    • kafka.bootstrap.servers: 指向hadoop02:9092,hadoop03:9092...

图12-3 Flume Agent 内部组件图

12.3.4 Kafka 集群:Kraft 模式革新

本案例采用了Kafka 3.4.0Kraft (Kafka Raft)模式,彻底移除了对 ZooKeeper 的依赖。

  • 关键配置 (server.properties)
    • process.roles=broker,controller:节点同时作为数据代理和控制器。
    • controller.quorum.voters=1@hadoop02:9093,2@hadoop03:9093,3@hadoop04:9093:定义了投票节点集合,用于选举 Controller Leader。
  • 初始化操作
    必须执行kafka-storage.sh format -t <uuid> -c ...命令来初始化存储目录,这是 Kraft 模式特有的步骤。

图12-4 Kafka Kraft 集群架构

12.3.5 Flink 实时计算与 YARN Session

Flink 承担了核心的 ETL 和聚合计算任务。

  • 作业逻辑
    1. Source: 消费 Kafka 主题web01_nginx_log
    2. Transformation: 解析 JSON 日志,提取request_time等字段。
    3. Aggregation: 实时计算以下指标:
      • request_count: 总请求次数。
      • max_request_time: 最大响应时间。
      • min_request_time: 最小响应时间。
      • avg_request_time: 平均响应时间。
    4. Sink: 通过 JDBC 将结果写入 PostgreSQL 表web01_nginx_log_analysis
  • 关键技术点
    • 序列化:由于涉及时间处理,代码中显式注册了ZonedDateTimeKryo 序列化器(env.getConfig().registerTypeWithKryoSerializer...),以确保对象在分布式节点间正确传输。
    • 资源调度:采用YARN Session模式 (yarn-session.sh --detached)。这种模式预先在 YARN 上申请一个常驻的 Flink 集群,后续提交任务时无需重复申请资源,启动速度更快。

图12-5 Flink 实时处理逻辑

12.4 运行与验证

  1. 启动顺序:HDFS/YARN -> Kafka -> PostgreSQL -> Web App -> Flume -> Flink -> Locust。
  2. 验证手段
    • 查看 Flume 日志确认采集正常。
    • 使用kafka-console-consumer.sh验证 Kafka 是否收到数据。
    • 查询 PostgreSQL 数据库验证分析结果是否实时更新。

12.5 本章总结

本章的综合实践不仅是对单一技术的应用,更是对大数据平台架构设计能力的综合考量:

  • Flume + Kafka构成了工业界标准的“日志高速公路”。
  • Kraft 模式展示了 Kafka 架构演进的最新方向(元数据自管理)。
  • Flink On YARN演示了计算资源与集群管理的深度集成。
    通过本章实践,我们构建了一个具备高扩展性、低延迟特性的实时日志分析平台原型。

作者:栗子同学

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 2:07:35

使用Yolov8训练使用道路车道线分割数据集 训练出道路路面交通标志标识数据集的权重 识别左车道线、右车道线和中线

使用Yolov8训练使用道路车道线分割数据集 训练出道路路面交通标志标识数据集的权重 识别左车道线、右车道线和中线 文章目录 数据集准备转换VOC到YOLO格式训练代码构建识别系统推理代码模型优化界面设计 车道线分割数据集 17000张 车道分割 voc yolo标注的数据集的训练 三类: …

作者头像 李华
网站建设 2026/4/28 2:02:20

宠物赛道的 AI 公司,都在做什么?

我们都知道宠物赛道的盘子大&#xff0c;这几年也一直不缺钱。那宠物赛道的 AI 公司都在干什么呢&#xff1f;我找了几家宠物赛道的 AI 公司&#xff0c;本来以为这些公司会集中在宠物消费、宠物智能硬件这些领域。结果发现&#xff0c;这几家值得分享的 AI 公司几乎都扎在宠物…

作者头像 李华
网站建设 2026/4/28 2:00:19

改进SVM牵引变压器故障检测系统实现【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导&#xff0c;毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;查看文章底部二维码&#xff08;1&#xff09;改进核主成分分析与斯皮尔曼相关系数特征筛选&…

作者头像 李华
网站建设 2026/4/28 1:56:48

C++代码和可执行程序在x86和arm上的区别介绍

从使用上来看&#xff0c;可执行程序肯定是不通用的。 armx86 生成的可执行程序大小都有差异呢。 但是&#xff0c;如果源码编译&#xff0c;如果环境类似&#xff0c;相同的源码可以直接移植。 例如&#xff1a;如下程序&#x1f447;donut.cpp 1 2 3 4 5 6 7 8 9 10 11 12…

作者头像 李华