(课堂笔记)Kafka + Flume 完整实战

发布时间:2026/6/1 19:02:12

(课堂笔记)Kafka + Flume 完整实战 本笔记系统梳理Kafka核心知识及Flume整合方案。重点包含1Kafka核心组件Topic/Partition/Consumer Group及消息队列特性2环境搭建与基础命令操作3Flume-Kafka集成配置详解强调Topic一致性等关键参数4三窗口实战演示日志采集流程5典型问题排查指南如连接拒绝、Topic不匹配等。笔记突出配置文件逐项检查、保持Topic一致等实战经验涵盖从理论到排错的完整知识链配有结构化命令示例和配置模板适合作为分布式消息中间件开发的速查手册。基于我们之前的全部问答和实际操作经验我为你重新整理一份完整的 Kafka 课堂笔记融入实战中遇到的问题和解决方案方便日后复习。Kafka 课堂笔记完整实战版一、Kafka 概述1.1 什么是 KafkaKafka 是一个分布式的、基于发布/订阅模式的消息队列系统。数据流转过程text生产者 → 消息队列(MQ) → 消费者1.2 消息队列的作用作用说明解耦生产者和消费者可独立变化只需遵循相同接口缓冲生产速率和消费速率可以不一致峰值处理高并发时数据先入队列后期慢慢消费异步通信任务拆分为多个步骤并行执行可恢复性部分组件失效不影响整体1.3 消息队列的两种模式模式特点消费后数据点对点一个生产者 → 一个消费者通常移除发布/订阅一个生产者 → 多个消费者保留在队列中二、Kafka 核心角色角色说明Producer消息生产者发送数据到 KafkaConsumer消息消费者从 Kafka 读取数据Consumer Group (CG)多个消费者组成一个组共同消费 TopicBroker一台 Kafka 服务器就是一个 BrokerTopic消息队列逻辑概念PartitionTopic 的分区用于水平扩展Replication副本保证数据可靠性Leader分区的主节点负责读写Follower分区的从节点同步 Leader 数据三、环境搭建3.1 启动前置服务bash# 启动 ZooKeeperKafka 依赖 cd $ZOOKEEPER_HOME bin/zkServer.sh start # 启动 Kafka cd $KAFKA_HOME bin/kafka-server-start.sh -daemon config/server.properties # 验证启动 jps | grep -E Kafka|QuorumPeerMain3.2 Kafka 配置说明bash# 查看监听配置 cat $KAFKA_HOME/config/server.properties | grep listenerslisteners被注释时默认监听0.0.0.0:9092所有网络接口localhost:9092和node100:9092都可以连接指向同一台机器四、Kafka 基本命令4.1 Topic 操作命令bash# 创建 Topic bin/kafka-topics.sh --bootstrap-server localhost:9092 \ --create --topic 主题名 --partitions 1 --replication-factor 1 # 查看所有 Topic bin/kafka-topics.sh --bootstrap-server localhost:9092 --list # 查看 Topic 详情 bin/kafka-topics.sh --bootstrap-server localhost:9092 \ --describe --topic 主题名 # 删除 Topic bin/kafka-topics.sh --bootstrap-server localhost:9092 \ --delete --topic 主题名 # 修改 Topic如增加分区 bin/kafka-topics.sh --bootstrap-server localhost:9092 \ --alter --topic 主题名 --partitions 34.2 生产与消费消息bash# 生产者发送消息 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic 主题名 # 消费者接收消息 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic 主题名 # 消费者从头开始消费历史消息 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 \ --topic 主题名 --from-beginning五、Flume Kafka 整合5.1 为什么要用 Flume场景Kafka 直接通信Flume Kafka数据来源手动输入自动监控文件/目录人工介入每次都需要配置后自动运行适用场景测试、调试生产环境日志采集5.2 环境准备bash# 创建日志文件目录 mkdir -p /opt/module/flume/data/ # 创建日志文件 touch /opt/module/flume/data/flume.log # 创建 Flume 配置目录 mkdir -p /opt/module/flume/job/5.3 Flume 配置文件详解文件位置/opt/module/flume/job/flume-kafka.confproperties# 1. 定义组件名称 a1.sources r1 # Source 名称 a1.sinks k1 # Sink 名称 a1.channels c1 # Channel 名称 # 2. 配置 Source数据来源 a1.sources.r1.type exec # 类型执行Linux命令 a1.sources.r1.command tail -f /opt/module/flume/data/flume.log # 监控文件 # 3. 配置 Sink数据去向 a1.sinks.k1.type org.apache.flume.sink.kafka.KafkaSink # 类型Kafka a1.sinks.k1.kafka.bootstrap.servers localhost:9092 # Kafka地址 a1.sinks.k1.kafka.topic a2608 # ⚠️ Topic名称关键 a1.sinks.k1.kafka.flumeBatchSize 20 # 批量发送大小 a1.sinks.k1.kafka.producer.acks 1 # 确认级别 a1.sinks.k1.kafka.producer.linger.ms 1 # 延迟时间 # 4. 配置 Channel缓冲区 a1.channels.c1.type memory # 类型内存 a1.channels.c1.capacity 1000 # 最大存储量 a1.channels.c1.transactionCapacity 100 # 事务处理量 # 5. 绑定组件 a1.sources.r1.channels c1 # Source → Channel a1.sinks.k1.channel c1 # Sink ← Channel5.4 配置文件关键点常见错误配置项常见错误正确做法kafka.topic与其他地方不一致必须与消费者监听的 Topic 相同bootstrap.servers地址写错确保 Kafka 能访问到command路径文件路径错误确保日志文件存在5.5 启动 Flumebashcd /opt/module/flume bin/flume-ng agent -c conf -n a1 -f job/flume-kafka.conf -Dflume.root.loggerINFO,console六、完整实战流程三个窗口6.1 窗口布局窗口角色作用窗口1Flume监控日志文件发送到 Kafka窗口2Kafka 消费者显示接收到的消息窗口3数据生产者向日志文件写入测试数据6.2 操作顺序第一步创建 Topicbash# 任意窗口 cd $KAFKA_HOME bin/kafka-topics.sh --bootstrap-server localhost:9092 \ --create --topic a2608 --partitions 1 --replication-factor 1第二步窗口2 - 启动消费者bashcd $KAFKA_HOME bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic a2608 # 光标停住不动 正常等待数据第三步窗口1 - 启动 Flumebashcd /opt/module/flume bin/flume-ng agent -c conf -n a1 -f job/flume-kafka.conf -Dflume.root.loggerINFO,console # 看到 Started 日志 启动成功第四步窗口3 - 写入测试数据bashecho 测试消息 /opt/module/flume/data/flume.log第五步观察结果窗口2 应显示测试消息✅七、常见问题与排错7.1 问题速查表现象可能原因解决方法消费者启动报Connection refusedKafka 未启动启动 Kafka消费者启动报No such file or directory不在 Kafka 目录cd $KAFKA_HOME消费者光标停住但收不到消息Topic 名称不一致检查 Flume 配置中的 topicFlume 启动后很快退出配置文件语法错误检查配置文件Flume 启动但没有tail -f日志Source 配置错误检查type和command写入文件后消费者无反应Flume 未运行检查 Flume 进程7.2 排错命令bash# 1. 查看 Kafka 中的 Topic 列表 bin/kafka-topics.sh --bootstrap-server localhost:9092 --list # 2. 测试 Kafka 直接通信绕过 Flume bin/kafka-console-producer.sh --broker-list localhost:9092 --topic a2608 # 输入消息看消费者能否收到 # 3. 查看 Flume 进程 ps aux | grep flume # 4. 查看日志文件内容 cat /opt/module/flume/data/flume.log # 5. 检查配置文件关键项 cat /opt/module/flume/job/flume-kafka.conf | grep -E topic|command|bootstrap7.3 核心原则保持 Topic 一致textFlume 配置中的 topic Kafka 消费者监听的 topic不一致时的后果Flume 把数据发到 Topic A消费者从 Topic B 读取消费者永远收不到消息 ❌八、概念补充8.1 本机环回地址Loopback地址说明127.0.0.1IPv4 环回地址指向本机localhost域名解析为127.0.0.1特点数据不经过网卡内部直接传递速度快8.2 常用命令的幂等性命令多次执行结果mkdir -p目录存在时不报错静默跳过touch文件存在时只更新时间戳不覆盖内容echo 追加内容不覆盖原有内容九、学习要点总结9.1 你已掌握的技能✅ Kafka 核心概念Topic、Producer、Consumer、Broker✅ Kafka 基本命令创建、查看、删除 Topic生产、消费消息✅ Flume 配置结构Source、Channel、Sink 及绑定关系✅ Flume Kafka 整合实现日志自动采集✅ 常见问题的排查方法9.2 关键经验配置文件中的每一行都有意义不要忽视排错时逐项检查每个参数是否正确Topic 名称必须一致是最常见的错误理解后再修改不要盲目复制粘贴十、笔记说明本笔记基于课堂内容和实际操作中的问题总结而成记录了从零开始的完整学习过程包含理论概念命令操作配置详解实战流程常见错误及解决方案适合作为日常复习和实验参考。

相关新闻