Kafka 安装和运维

💡 原文中文,约9300字,阅读约需23分钟。
📝

内容提要

了解Kafka的安装和运维命令,使用Ansible Playbook简化部署,使用Docker运行Kafka,创建和查看Consumer Group,创建、删除和查看Topic,增加Partition个数,命令行消费和生产数据,通过配置文件指定Consumer Group。

🔎

延伸解读

部署方式选择:Ansible 与 Docker 的适用场景

文章介绍了两种 Kafka 部署方式:Ansible Playbook 用于多节点集群部署,示例中配置了三台机器同时运行 Zookeeper 和 Kafka;Docker Compose 则用于单节点快速启动,使用 bitnami/kafka:3.5 镜像并启用 KRaft 模式。读者可根据环境规模选择:需要模拟生产集群时用 Ansible,本地开发或测试时用 Docker 更便捷。

Consumer Group 的创建与查看要点

文章指出 Consumer Group 通常无法直接通过命令行工具创建,而是在 Consumer 启动时指定,若不存在则自动创建。使用 kafka-console-consumer.sh 时,可通过 --consumer.config 指定配置文件(如 config/consumer.properties)来设置 group.id。查看 Group 列表和详情分别使用 --list 和 --describe 参数,后者能显示各分区的消费进度和 LAG。

Topic 管理命令的版本差异与实用技巧

文章中的 Topic 管理命令存在新旧版本混用:创建、查看列表和详情使用 --bootstrap-server,而删除、增加分区等操作仍使用 --zookeeper。读者需注意实际环境版本,避免参数错误。此外,查看指定 Topic 详情时可关注 ISR 列表,若 ISR 少于副本数,可能表示副本同步异常,需进一步排查 Broker 状态。

命令行生产消费与 Offset 查询

文章演示了使用 kafka-console-consumer.sh 和 kafka-console-producer.sh 进行命令行消费和生产。消费时可通过 --from-beginning 从最早消息开始。查询分区 Offset 极值可使用 kafka-run-class.sh kafka.tools.GetOffsetShell,其中 --time -1 查最新 Offset,--time -2 查最早 Offset。注意旧版 Consumer 依赖 Zookeeper 保存 Offset,新版则使用内置 T

❓

Q&A

如何用 Ansible Playbook 部署 Kafka 集群?

先修改 Ansible hosts 文件,定义 kafka_servers 和 zk_servers 组,为每个节点指定 kafka_broker_id 和 zk_id。然后运行命令:ansible-playbook kafka.yml -i hosts --tags "java,zookeeper,kafka",即可自动完成 JRE、Zookeeper 和 Kafka 的安装。

Docker 运行 Kafka 的 docker-compose 配置怎么写?

使用 bitnami/kafka:3.5 镜像,配置 KRaft 模式:设置 KAFKA_CFG_NODE_ID=0、KAFKA_CFG_PROCESS_ROLES=controller,broker、KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093,监听器为 PLAINTEXT://:9092 和 CONTROLLER://:9093,并挂载 kafka_data 卷。然后执行 docker compose up -d 启动。

如何创建和查看 Kafka Consumer Group?

Consumer Group 通常在创建 Consumer 时指定,若不存在会自动创建。查看所有 Consumer Group 使用命令:bin/kafka-consumer-groups.sh --bootstrap-server <地址:端口> --list。查看指定 Group 详情使用:bin/kafka-consumer-groups.sh --bootstrap-server <地址:端口> --describe --group <组名>。

Kafka 创建、删除和查看 Topic 的命令是什么?

创建 Topic:bin/kafka-topics.sh --bootstrap-server <地址:端口> --create --topic <名称> --replication-factor <副本数> --partitions <分区数>。删除 Topic:bin/kafka-topics.sh --zookeeper <zk地址> --delete --topic <名称>。查看 Topic 列表:bin/kafka-topics.sh --zookeeper <zk地址> --list。查看所有 Topic 详情:bin/kafka-topics.sh --zookeeper <zk地址> --describe。

如何增加 Kafka Topic 的 Partition 个数?

使用命令:bin/kafka-topics.sh --zookeeper <zookeeper连接地址> --alter --topic <Topic名称> --partitions <新的分区数>。注意分区数只能增加不能减少。

如何通过配置文件指定 Kafka 命令行消费者的 Consumer Group?

使用 kafka-console-consumer.sh 时,通过 --consumer.config 参数指定配置文件,例如:bin/kafka-console-consumer.sh --bootstrap-server <地址:端口> --topic <Topic> --from-beginning --consumer.config config/consumer.properties。在 config/consumer.properties 中设置 group.id=test-consumer-group 即可。

🏷️

标签

➡️

继续阅读