整理 Kafka 常用的命令,可以用于快速查询。
简介
Kafka 的版本信息可以查看 libs
目录下的包确定,例如 kafka_2.11-0.10.1.1.jar
表示 scala
的版本是 2.11
而 Kafka
版本为 0.10.1.1
。
从 2.8 开始支持通过 kraft 管理元数据,所以根据不同的元数据管理方式,一般可以通过 --zookeeper
或者 --bootstrap-server
指定,对于 ZK 来说也可以在某个子目录下创建,如下示例为在 /kafka-ssl
目录下。
Topic管理
----- 查看所有Topic列表,默认zk为如下端口
bin/kafka-topics.sh --list --zookeeper 192.168.2.140:2128/kafka-ssl
bin/kafka-topics.sh --list --bootstrap-server 192.168.2.140:9092
----- 创建Topic,并指定相关参数
bin/kafka-topics.sh --create --zookeeper 192.168.2.140:2128/kafka-ssl --replication-factor 1 --partitions 3 --topic foobar
bin/kafka-topics.sh --create --bootstrap-server 192.168.2.140:9092 --replication-factor 1 --partitions 3 --topic foobar
----- 指定Topic的状态信息,包括了分区、Leader信息,详见如下介绍
bin/kafka-topics.sh --describe --zookeeper 192.168.2.140:2128/kafka-ssl --topic foobar
bin/kafka-topics.sh --describe --bootstrap-server 192.168.2.140:9092 --topic foobar
----- 修改Topic的分区数量,只增不减
bin/kafka-topics.sh --alter --zookeeper 192.168.2.140:8613/kafka-ssl --partitions 10 --topic foobar
bin/kafka-topics.sh --alter --bootstrap-server 192.168.2.140:9092 --partitions 10 --topic foobar
参数配置
默认使用全局配置,如果存在则 Topic 级别会覆盖全局配置。
----- 创建时指定
bin/kafka-topics.sh --create --zookeeper 192.168.2.140:8613/kafka-ssl --replication-factor 1 --partitions 1 --topic foobar --config max.message.bytes=64000 --config flush.messages=1
----- 修改Topic参数
bin/kafka-topics.sh --alter --zookeeper 192.168.2.140:8613/kafka-ssl --topic foobar --config max.message.bytes=64000 --config flush.messages=1
----- 删除Topic参数
bin/kafka-topics.sh --alter --zookeeper 192.168.2.140:8613/kafka-ssl --topic foobar --delete-config max.message.bytes
分区状态信息查看
如上仅列出其中的一个 Partition 情况,第一列显示所有分区情况,包括了 Topic 名称、分区数、副本数。
接下来每行代表一个 Partition 的情况,如上 Partition: 0
表示第 0 个分区,其 Leader 为 3
这个 Broker ,分布在 Replicas: 2,3,0
这三个 Brokers 上 (这里不管是否已经同步),同步且存活的副本包括 Isr: 3,0
,也就是所有副本都是同步的,其中 Isr
是 In-sync replicas
的简写。
当 Producer 发送一个消息时,自己会判断发送到哪个 Partiton 上,假设,发送到上述的 Partition0 上,消息会发到该分区的 Leader,也就是 Broker0 上,由 Broker0 处理这个消息,其它的 Broker1、Broker2 则会从 Broker0 同步这个消息。如果 Broker0 挂了,那么 Kafka 的 Leader Broker 会在 Isr 列表里剩下的 Broker1、Broker2 中选一个新的 Leader 。
生产消费数据
----- 开始生产数据
bin/kafka-console-producer.sh --broker-list 192.168.2.140:9092 --topic foobar
----- 如果使用SSL配置,可以通过参数指定配置文件
bin/kafka-console-producer.sh --broker-list 192.168.2.140:9092 --topic foobar --producer.config ../config/producer.properties
----- 开始消费数据,默认是从最新开始消费,可以指定开始、分区、打印key等
bin/kafka-console-consumer.sh --bootstrap-server 192.168.2.140:9092 --group=test --topic foobar --from-beginning
bin/kafka-console-consumer.sh --bootstrap-server 192.168.2.140:9092 --group=test --topic foobar --from-beginning --partition 0
bin/kafka-console-consumer.sh --bootstrap-server 192.168.2.140:9092 --group=test --topic foobar --from-beginning --property print.key=true
消费组
----- 所有消费分组
bin/kafka-consumer-groups.sh --bootstrap-server 192.168.2.140:9092 --list
----- 消费分组下的数据消费情况
bin/kafka-consumer-groups.sh --bootstrap-server 192.168.2.140:9092 --describe --group test
其中 CURRENT-OFFSET
LOG-END-OFFSET
LAG
是三个比较重要的指标,分别表示消费组最后一次提交的偏移、生产最后提交的消息偏移、两者之间的差值。
重置消费偏移
----- 比较尴尬的是类似0.10.x的版本,此时Consumer信息没有保存在ZK,而且还没有提供offset的重置功能
----- 直接删除,不清楚如何设置指定的offset值,只能删除基于ZK保存Consumer信息的实现
bin/kafka-consumer-groups.sh --zookeeper 192.168.2.140:8613/kafka-ssl --group test --delete --topic foobar
----- 重置偏移量,需要0.11版本支持,支持 --to-offset 123 以及 --to-latest 参数,注意需要无客户端链接
bin/kafka-consumer-groups.sh --bootstrap-server 192.168.2.140:9092 --group test --reset-offsets --to-earliest --all-topics --execute
常用工具
run-class
----- 查看某个Topic分区对应的偏移量,-1 为最大值 -2 为最小值
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 192.168.2.140:9092 --topic foobar --time -1
------ 查看某个文件的日志信息
bin/kafka-run-class.sh kafka.tools.DumpLogSegments --deep-iteration --files kafka-logs/test-0/00000000000000000000.log
可以通过bin/kafka-run-class.sh脚本执行一些类,详细可以查看 Github Tools 中的源码实现。
其它
----- 查看监听IP地址,一般非加密的采用9092端口
netstat -ano | grep 9092 | grep LISTEN
192.107.58.166:9092
------ 查看Kafka某个Topic配置
bin/kafka-configs.sh --bootstrap-server 192.168.2.140:9092 --entity-type topics --entity-name foobar --describe