Kafka作为分布式流处理平台,其命令行工具是日常运维和开发中不可或缺的部分,掌握常用命令能够高效管理主题、分区、消费者组等核心资源,以下从主题管理、生产与消费、集群状态等维度详细介绍Kafka常用命令。

主题管理相关命令
主题是Kafka中消息的基本组织单元,通过kafka-topics.sh
脚本可完成主题的创建、查询、修改和删除,创建主题时需指定主题名称、分区数和副本因子,./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test-topic --partitions 3 --replication-factor 2
,该命令在本地Kafka集群创建名为test-topic
的主题,包含3个分区和2个副本,查询主题列表可通过--list
参数,如./kafka-topics.sh --bootstrap-server localhost:9092 --list
;查看特定主题详情则使用--describe
,输出包括分区号、Leader副本、ISR副本列表等信息,若需修改主题配置(如调整分区数),可执行./kafka-topics.sh --bootstrap-server localhost:9092 --alter --topic test-topic --partitions 5
,注意分区数只能增加不能减少;删除主题则需加上--delete
参数,且需确保delete.topic.enable
配置为true
(默认为false
)。
生产与消费命令
生产者消息发送通过kafka-console-producer.sh
实现,基本用法为./kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test-topic
,启动后可通过控制台输入消息并按回车发送,支持指定键值(如--property parse.key=true --property key.separator=:
)或指定消息序列化类,消费者消息消费则使用kafka-console-consumer.sh
,常用参数包括--from-beginning
(从分区最早位置消费)、--bootstrap-server
(指定集群地址)、--topic
(指定主题)及--group
(指定消费者组)。./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --from-beginning --group test-group
会从最早位置消费test-topic
的消息,并将消费者组命名为test-group
,若需查看消费位移,可结合--offset
参数或使用kafka-consumer-groups.sh
命令。
集群与消费者组管理
查看集群状态可通过kafka-broker-api-versions.sh
,例如./kafka-broker-api-versions.sh --bootstrap-server localhost:9092
,可输出各Broker支持的协议版本,消费者组管理依赖kafka-consumer-groups.sh
,列出所有消费者组使用--list
,如./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
;查看特定消费者组详情(如位移、成员信息)则用--describe --group <group-name>
,输出包含消费者ID、客户端ID、分区分配情况及最后提交的位移,若需重置消费者组位移,可执行--reset-offsets --group <group-name> --to-earliest
(重置到最早位移)或--to-latest
(重置到最新位移),操作前建议通过--export
参数预览重置计划。
其他实用命令
查看主题消息内容可直接使用kafka-console-consumer.sh
,或通过kafka.tools.DumpLogSegments
工具分析日志文件,例如./kafka-run-class.sh kafka.tools.DumpLogSegments --files /tmp/kafka-logs/test-topic-0/00000000000000000000.log
,可查看分区日志文件中的消息格式和时间戳。kafka-acls.sh
用于管理访问控制列表(ACL),例如./kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:Alice --operation Read --topic test-topic
为用户Alice授予test-topic
的读权限。

相关问答FAQs
Q1: 如何查看Kafka主题的消息数量?
A: 可通过kafka-run-class.sh kafka.tools.GetOffsetShell
命令计算,例如./kafka-run-class.sh kafka.tools.GetOffsetShell --topic test-topic --bootstrap-server localhost:9092 --time -1
(-1
表示最新位移)获取各分区的最新位移,再对各分区位移求和即可得到总消息数,也可结合kafka.tools.ConsumerOffsetChecker
(旧版本)或使用kafka-consumer-groups.sh --describe --group <group>
查看消费位移与最新位移的差值。
Q2: 消费者组提示“Rebalance in progress”如何处理?
A: “Rebalance in progress”通常表示消费者组正在进行再平衡,可能由消费者崩溃、新增消费者或会话超时(session.timeout.ms
)触发,首先检查消费者日志确认是否有异常退出;其次通过kafka-consumer-groups.sh --describe --group <group>
查看消费者状态,若长时间处于Rebalancing
,可尝试调整max.poll.interval.ms
(消费者最大轮询间隔)和heartbeat.interval.ms
(心跳间隔)参数,确保心跳频率高于会话超时频率;检查网络分区或Broker负载是否过高,避免因延迟导致消费者被踢出组。
