news 2026/6/13 8:56:00

Kafka 集群部署与命令行实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kafka 集群部署与命令行实战

一、环境准备与集群规划

1.1 集群架构设计


节点IP角色
hadoop102192.168.x.xKafka Broker 0 + Zookeeper
hadoop103192.168.x.xKafka Broker 1 + Zookeeper
hadoop104192.168.x.xKafka Broker 2 + Zookeeper

1.2 前置依赖

  • JDK 1.8+(推荐 OpenJDK 8)
  • Zookeeper 3.4.x/3.5.x(Kafka 2.x 依赖,3.x 可选 KRaft)
  • SSH 免密登录(集群间通信)

二、Kafka 下载与安装

2.1 下载安装包

访问官方下载页:https://kafka.apache.org/downloads

# 下载 Kafka 2.11-0.11.0.0(教学版本,生产建议用 2.x/3.x)wgethttps://archive.apache.org/dist/kafka/0.11.0.0/kafka_2.11-0.11.0.0.tgz

2.2 解压安装

# 解压到 /opt/module/tar-zxvfkafka_2.11-0.11.0.0.tgz-C/opt/module/# 重命名(方便后续操作)mv/opt/module/kafka_2.11-0.11.0.0 /opt/module/kafka# 创建日志目录mkdir/opt/module/kafka/logs

三、核心配置文件详解

3.1 server.properties 完整配置

cd/opt/module/kafka/config/viserver.properties
# ==================== 核心标识 ==================== # broker 全局唯一编号,集群内不能重复(0,1,2...) broker.id=0 # ==================== 网络配置 ==================== # 监听地址(默认即可,生产环境建议绑定具体IP) listeners=PLAINTEXT://:9092 # 处理网络请求的线程数 num.network.threads=3 # 处理磁盘 IO 的线程数(建议 ≥ 磁盘数) num.io.threads=8 # 发送缓冲区大小(字节) socket.send.buffer.bytes=102400 # 接收缓冲区大小(字节) socket.receive.buffer.bytes=102400 # 请求最大字节数(防止内存溢出) socket.request.max.bytes=104857600 # ==================== 日志存储 ==================== # Kafka 数据存放路径(可配置多个,逗号分隔) log.dirs=/opt/module/kafka/logs # 默认分区数(Topic 创建时未指定则使用此值) num.partitions=1 # 恢复和清理数据的线程数 num.recovery.threads.per.data.dir=1 # Segment 文件保留时间(小时),默认 7 天 log.retention.hours=168 # ==================== 副本机制 ==================== # 默认副本数(建议生产环境 ≥ 2) default.replication.factor=1 # ==================== Topic 管理 ==================== # 启用删除 Topic 功能(默认 false,建议设为 true) delete.topic.enable=true # 自动创建 Topic(建议生产环境设为 false,严格管控) auto.create.topics.enable=true # ==================== Zookeeper ==================== # Zookeeper 连接串(格式:host:port,host:port) zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181 # Zookeeper 连接超时时间 zookeeper.connection.timeout.ms=6000

3.2 关键配置参数速查表

参数默认值说明生产建议
broker.id0Broker 唯一标识必须唯一,建议 0,1,2…
log.dirs/tmp/kafka-logs数据存储路径必须修改,避免系统盘
num.partitions1默认分区数建议 3-5
log.retention.hours168日志保留时间根据磁盘调整
delete.topic.enablefalse删除 Topic 开关必须设为 true
zookeeper.connectnullZK 地址必填,所有 ZK 节点

四、集群部署与启动

4.1 配置环境变量

sudovi/etc/profile# 追加以下内容# KAFKA_HOMEexportKAFKA_HOME=/opt/module/kafkaexportPATH=$PATH:$KAFKA_HOME/bin# 生效source/etc/profile

4.2 分发安装包到集群

# 使用自定义脚本或 scp 分发xsync kafka/# 或手动 scpscp-r/opt/module/kafka atguigu@hadoop103:/opt/module/scp-r/opt/module/kafka atguigu@hadoop104:/opt/module/

4.3 修改各节点 broker.id

# hadoop103vi/opt/module/kafka/config/server.propertiesbroker.id=1# hadoop104vi/opt/module/kafka/config/server.propertiesbroker.id=2

⚠️重要broker.id集群内绝对不能重复!

4.4 启动集群

先启动 Zookeeper 集群

# 各节点执行zkServer.sh start

再启动 Kafka 集群(依次执行):

# hadoop102bin/kafka-server-start.sh config/server.properties&# hadoop103bin/kafka-server-start.sh config/server.properties&# hadoop104bin/kafka-server-start.sh config/server.properties&

💡后台启动建议:使用nohup或自定义启动脚本,避免终端关闭导致进程退出。

4.5 验证集群状态

# 查看进程jps# 应显示:Kafka, QuorumPeerMain(ZK)# 查看 ZK 中注册的 brokerzkCli.sh-serverhadoop102:2181ls/brokers/ids# 输出:[0, 1, 2]

4.6 关闭集群

# 依次关闭(先关 Kafka,再关 ZK)bin/kafka-server-stop.sh# 各节点执行zkServer.sh stop

五、命令行操作实战

5.1 Topic 管理

① 查看所有 Topic
bin/kafka-topics.sh--zookeeperhadoop102:2181--list
② 创建 Topic
bin/kafka-topics.sh--zookeeperhadoop102:2181--create--replication-factor3--partitions3--topicfirst

参数说明

参数说明
--topicTopic 名称
--replication-factor副本数(不能超过 Broker 数)
--partitions分区数
创建结果验证: Topic: first ├─ Partition 0 → Leader: 102, Replicas: [102,103,104] ├─ Partition 1 → Leader: 103, Replicas: [103,104,102] └─ Partition 2 → Leader: 104, Replicas: [104,102,103]
③ 查看 Topic 详情
bin/kafka-topics.sh--zookeeperhadoop102:2181--describe--topicfirst

输出解析

Topic:first PartitionCount:3 ReplicationFactor:3 Configs: Topic: first Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2 Topic: first Partition: 1 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0 Topic: first Partition: 2 Leader: 2 Replicas: 2,0,1 Isr: 2,0,1
字段含义
Leader该分区的 Leader Broker ID
Replicas所有副本所在的 Broker ID
IsrIn-Sync Replicas,与 Leader 保持同步的副本
④ 删除 Topic
bin/kafka-topics.sh--zookeeperhadoop102:2181--delete--topicfirst

⚠️坑点提醒

  • 必须设置delete.topic.enable=true,否则只是标记删除(显示为first - marked for deletion
  • 若未开启,需手动删除 ZK 节点和日志文件,或重启 Kafka

5.2 生产者操作

启动控制台生产者
bin/kafka-console-producer.sh --broker-list hadoop102:9092--topicfirst

发送消息

> hello world > atguigu kafka > 2024-01-25 14:30:00

💡多 Broker 写法--broker-list hadoop102:9092,hadoop103:9092,hadoop104:9092(建议写上全部,容错性更好)


5.3 消费者操作

① 基础消费(从最新位置开始)
bin/kafka-console-consumer.sh--zookeeperhadoop102:2181--topicfirst
② 从头消费(历史数据全量读取)
bin/kafka-console-consumer.sh--zookeeperhadoop102:2181 --from-beginning--topicfirst

⚠️注意--from-beginning会读取该 Topic 所有历史数据,数据量大时慎用!

③ 指定消费者组
bin/kafka-console-consumer.sh--zookeeperhadoop102:2181--topicfirst--consumer.configconfig/consumer.properties

consumer.properties配置:

group.id=atguigu

六、消费者组验证实验

6.1 实验目的

验证:同一消费者组内,一个分区同一时间只能被一个消费者消费

6.2 实验步骤

Step 1:在 hadoop102 和 hadoop103 上配置相同消费者组

# 两节点都执行vi/opt/module/kafka/config/consumer.propertiesgroup.id=atguigu

Step 2:两节点同时启动消费者

# hadoop102bin/kafka-console-consumer.sh--zookeeperhadoop102:2181--topicfirst--consumer.configconfig/consumer.properties# hadoop103bin/kafka-console-consumer.sh--zookeeperhadoop102:2181--topicfirst--consumer.configconfig/consumer.properties

Step 3:在 hadoop104 上启动生产者并发送消息

bin/kafka-console-producer.sh --broker-list hadoop102:9092--topicfirst>hello world

Step 4:观察消费结果

预期结果: ┌────────────────────────────────────────┐ │ 消息 "hello world" 只会被其中一个 │ │ 消费者(hadoop102 或 hadoop103)接收 │ │ 不会两个同时收到! │ └────────────────────────────────────────┘

6.3 实验结论

场景结果
同一 Group,多个 Consumer负载均衡,分区分配给不同消费者
不同 Group,消费同一 Topic广播,每个 Group 都能收到全量消息
Consumer 数 > Partition 数多余消费者空闲,不消费数据

七、常见问题与避坑指南

7.1 启动失败排查

现象原因解决
broker.id冲突集群内 ID 重复检查各节点 server.properties
端口 9092 被占用已有 Kafka 进程kill -9 $(lsof -t -i:9092)
ZK 连接失败ZK 未启动或地址错误先启动 ZK,检查zookeeper.connect
内存不足JVM 堆内存不够调整KAFKA_HEAP_OPTS

7.2 删除 Topic 不彻底

# 若 delete.topic.enable=false,手动清理:# 1. ZK 中删除元数据zkCli.sh-serverhadoop102:2181 rmr /admin/delete_topics/first rmr /brokers/topics/first# 2. 删除本地日志rm-rf/opt/module/kafka/logs/first-*# 3. 重启 Kafka

7.3 消费不到数据

# 检查点:# 1. Topic 是否存在kafka-topics.sh--zookeeperhadoop102:2181--list# 2. 消费者组偏移量是否已提交kafka-consumer-groups.sh--zookeeperhadoop102:2181--describe--groupatguigu# 3. 使用 --from-beginning 测试是否有历史数据

八、总结

本文完整覆盖了 Kafka 集群的部署与命令行操作:

环境准备 ──▶ 下载安装 ──▶ 配置详解 ──▶ 集群启动 │ ▼ 命令行实战 ──▶ Topic管理 ──▶ 生产者 ──▶ 消费者 ──▶ 消费者组实验 │ ▼ 问题排查 ──▶ 启动失败 ──▶ 删除Topic ──▶ 消费异常

如果本文对你有帮助,欢迎点赞 👍 + 收藏 ⭐ + 关注 🔖,你的支持是我持续创作的动力!

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

JetBrains与Fish Audio MCP的集成教程

JetBrains与Fish Audio MCP的集成教程 📘 完整指南: 在JetBrains(IntelliJ IDEA / PyCharm / WebStorm等)中使用所有AceData Cloud MCP → Ace Data Cloud 是一个高保真文本到语音(TTS)服务,支持多种声音选…

作者头像 李华
网站建设 2026/6/13 8:50:18

以功能点单价为基准的软件造价模式探讨

01 引言1.1 研究背景当前我国软件造价行业普遍采用人月单价模式。该模式以功能点规模度量为基础,依据国家标准GB/T 36964-2018《软件开发成本度量规范》测算软件功能点规模,再通过功能点耗时率将规模转换为工作量(人月)&#xff0…

作者头像 李华
网站建设 2026/6/13 8:40:53

多维聚合实战:预处理-聚合中控制-后处理三层框架

1. 项目概述:多维聚合中的数据操作,远不止GROUP BY那么简单“Part 20: Data Manipulation in Multi-Dimensional Aggregation”这个标题乍看像是一门数据库课程的第20讲,但如果你真在业务一线做过报表开发、BI建模或数据中台建设,…

作者头像 李华