Kafka 集群部署与命令行实战
发布时间:2026/6/13 8:56:49
分类:文化教育
浏览:1234

一、环境准备与集群规划1.1 集群架构设计节点IP角色hadoop102192.168.x.xKafka Broker 0 Zookeeperhadoop103192.168.x.xKafka Broker 1 Zookeeperhadoop104192.168.x.xKafka Broker 2 Zookeeper1.2 前置依赖JDK 1.8推荐 OpenJDK 8Zookeeper 3.4.x/3.5.xKafka 2.x 依赖3.x 可选 KRaftSSH 免密登录集群间通信二、Kafka 下载与安装2.1 下载安装包访问官方下载页https://kafka.apache.org/downloads# 下载 Kafka 2.11-0.11.0.0教学版本生产建议用 2.x/3.xwgethttps://archive.apache.org/dist/kafka/0.11.0.0/kafka_2.11-0.11.0.0.tgz2.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.id0 # 网络配置 # 监听地址默认即可生产环境建议绑定具体IP listenersPLAINTEXT://:9092 # 处理网络请求的线程数 num.network.threads3 # 处理磁盘 IO 的线程数建议 ≥ 磁盘数 num.io.threads8 # 发送缓冲区大小字节 socket.send.buffer.bytes102400 # 接收缓冲区大小字节 socket.receive.buffer.bytes102400 # 请求最大字节数防止内存溢出 socket.request.max.bytes104857600 # 日志存储 # Kafka 数据存放路径可配置多个逗号分隔 log.dirs/opt/module/kafka/logs # 默认分区数Topic 创建时未指定则使用此值 num.partitions1 # 恢复和清理数据的线程数 num.recovery.threads.per.data.dir1 # Segment 文件保留时间小时默认 7 天 log.retention.hours168 # 副本机制 # 默认副本数建议生产环境 ≥ 2 default.replication.factor1 # Topic 管理 # 启用删除 Topic 功能默认 false建议设为 true delete.topic.enabletrue # 自动创建 Topic建议生产环境设为 false严格管控 auto.create.topics.enabletrue # Zookeeper # Zookeeper 连接串格式host:port,host:port zookeeper.connecthadoop102:2181,hadoop103:2181,hadoop104:2181 # Zookeeper 连接超时时间 zookeeper.connection.timeout.ms60003.2 关键配置参数速查表参数默认值说明生产建议broker.id0Broker 唯一标识必须唯一建议 0,1,2…log.dirs/tmp/kafka-logs数据存储路径必须修改避免系统盘num.partitions1默认分区数建议 3-5log.retention.hours168日志保留时间根据磁盘调整delete.topic.enablefalse删除 Topic 开关必须设为 truezookeeper.connectnullZK 地址必填所有 ZK 节点四、集群部署与启动4.1 配置环境变量sudovi/etc/profile# 追加以下内容# KAFKA_HOMEexportKAFKA_HOME/opt/module/kafkaexportPATH$PATH:$KAFKA_HOME/bin# 生效source/etc/profile4.2 分发安装包到集群# 使用自定义脚本或 scp 分发xsync kafka/# 或手动 scpscp-r/opt/module/kafka atguiguhadoop103:/opt/module/scp-r/opt/module/kafka atguiguhadoop104:/opt/module/4.3 修改各节点 broker.id# hadoop103vi/opt/module/kafka/config/server.propertiesbroker.id1# hadoop104vi/opt/module/kafka/config/server.propertiesbroker.id2⚠️重要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再关 ZKbin/kafka-server-stop.sh# 各节点执行zkServer.sh stop五、命令行操作实战5.1 Topic 管理① 查看所有 Topicbin/kafka-topics.sh--zookeeperhadoop102:2181--list② 创建 Topicbin/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 IDReplicas所有副本所在的 Broker IDIsrIn-Sync Replicas与 Leader 保持同步的副本④ 删除 Topicbin/kafka-topics.sh--zookeeperhadoop102:2181--delete--topicfirst⚠️坑点提醒必须设置delete.topic.enabletrue否则只是标记删除显示为first - marked for deletion若未开启需手动删除 ZK 节点和日志文件或重启 Kafka5.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.propertiesconsumer.properties配置group.idatguigu六、消费者组验证实验6.1 实验目的验证同一消费者组内一个分区同一时间只能被一个消费者消费。6.2 实验步骤Step 1在 hadoop102 和 hadoop103 上配置相同消费者组# 两节点都执行vi/opt/module/kafka/config/consumer.propertiesgroup.idatguiguStep 2两节点同时启动消费者# hadoop102bin/kafka-console-consumer.sh--zookeeperhadoop102:2181--topicfirst--consumer.configconfig/consumer.properties# hadoop103bin/kafka-console-consumer.sh--zookeeperhadoop102:2181--topicfirst--consumer.configconfig/consumer.propertiesStep 3在 hadoop104 上启动生产者并发送消息bin/kafka-console-producer.sh --broker-list hadoop102:9092--topicfirsthello worldStep 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_OPTS7.2 删除 Topic 不彻底# 若 delete.topic.enablefalse手动清理# 1. ZK 中删除元数据zkCli.sh-serverhadoop102:2181 rmr /admin/delete_topics/first rmr /brokers/topics/first# 2. 删除本地日志rm-rf/opt/module/kafka/logs/first-*# 3. 重启 Kafka7.3 消费不到数据# 检查点# 1. Topic 是否存在kafka-topics.sh--zookeeperhadoop102:2181--list# 2. 消费者组偏移量是否已提交kafka-consumer-groups.sh--zookeeperhadoop102:2181--describe--groupatguigu# 3. 使用 --from-beginning 测试是否有历史数据八、总结本文完整覆盖了 Kafka 集群的部署与命令行操作环境准备 ──▶ 下载安装 ──▶ 配置详解 ──▶ 集群启动 │ ▼ 命令行实战 ──▶ Topic管理 ──▶ 生产者 ──▶ 消费者 ──▶ 消费者组实验 │ ▼ 问题排查 ──▶ 启动失败 ──▶ 删除Topic ──▶ 消费异常如果本文对你有帮助欢迎点赞 收藏 ⭐ 关注 你的支持是我持续创作的动力