Kafka 生产中常用运维命令

💡 原文中文,约6900字,阅读约需17分钟。
📝

内容提要

Kafka是一种消息引擎,处理消息的主要对象是Record。主题是承载消息的逻辑容器,分区是有序的消息序列。副本提供数据冗余,分为领导者副本和追随者副本。生产者发布新消息,消费者订阅新消息。重平衡是消费者组内重新分配订阅主题分区的过程。Kafka运维常用操作包括创建主题、查看主题列表和详情、创建生产者和消费者、查看消费组和消费者组的消费情况、修改分区数、设置主题级别参数、设置限速、主题分区迁移、删除主题、重设位移等。

🔎

延伸解读

主题级别参数与动态参数的区别

文章指出,主题级别参数在创建或修改主题时设置,影响整个主题行为,修改后需重启Broker生效;动态参数则可在运行时通过命令行或API调整,无需重启服务。两者在生效方式和适用场景上不同,运维时需根据需求选择。

重设位移的两种实现方式

重设消费者组位移可通过消费者API或kafka-consumer-groups命令行脚本实现。文章强调命令行方式更简单,且该功能在Kafka 0.11版本引入,之前版本只能使用API。这为不同版本用户提供了操作参考。

七种位移重设策略的适用场景

文章列举了Earliest、Latest、Current、Specified-Offset、Shift-By-N、DateTime和Duration七种策略。Earliest用于重新消费所有消息,Latest跳过历史消息,Current回滚到提交位移,Specified-Offset跳过错误消息,Shift-By-N相对调整,DateTime和Duration按时间维度重设。

主题限速的设置步骤

设置主题限速需先为相关Broker配置leader和follower的复制限速参数,再为主题指定要限速的副本(可用通配符*)。文章以100MBps为例,说明需依次为每个Broker执行命令,并为主题设置限速副本,以控制副本同步带宽。

❓

Q&A

Kafka 中主题、分区和副本分别是什么?

主题是承载消息的逻辑容器,用于区分业务;分区是有序不变的消息序列,每个主题可有多个分区;副本是分区的冗余拷贝,分为领导者副本和追随者副本,提供高可用。

如何创建一个 Kafka 主题并指定副本数和分区数?

使用 kafka-topics.sh 脚本,例如:kafka-topics.sh --create --zookeeper <zookeeper地址> --replication-factor <副本数> --partitions <分区数> --topic <主题名>。也可用 --bootstrap-server 指定 broker 地址。

Kafka 中如何查看消费者组的消费情况?

使用 kafka-consumer-groups.sh 脚本,命令为:kafka-consumer-groups.sh --bootstrap-server <Kafka服务器地址> --group <消费者组名> --describe。

Kafka 重设位移有哪些策略?分别适用于什么场景?

有7种策略:Earliest(调整到最早位移,用于重新消费所有消息)、Latest(调整到最新末端位移,跳过历史消息)、Current(调整到当前提交位移,用于回滚代码后重设)、Specified-Offset(调整到指定位移,用于跳过错误消息)、Shift-By-N(相对当前位移跳过N条,可正可负)、DateTime(调整到指定时间之后的最早位移,如重新消费昨天数据)、Duration(调整到距离当前时间间隔的位移,如15分钟前)。

如何为 Kafka 主题设置限速以控制副本同步带宽?

先设置 Broker 端参数 leader.replication.throttled.rate 和 follower.replication.throttled.rate,例如:kafka-configs.sh --zookeeper <zk> --alter --add-config 'leader.replication.throttled.rate=104857600,follower.replication.throttled.rate=104857600' --entity-type brokers --entity-name <brokerId>。然后为主题设置要限速的副本,如:kafka-configs.sh --zookeeper <zk> --alter --add-config 'leader.replication.throttled.replicas=*,follower.replication.throttled.replicas=*' --entity-type topics --entity-name <主题名>。

删除 Kafka 主题时需要注意什么?

删除主题的命令是:kafka-topics.sh --bootstrap-server <broker> --delete --topic <主题名>。删除操作是异步的,执行命令后主题仅被标记为“已删除”,Kafka 会在后台执行删除,需要等待一段时间。

🏷️

标签

➡️

继续阅读