Kafka提供了诸多脚本用于管理、调试Kafka服务器以及集群,此篇列举一些常用的脚本命令,用于以后查阅。
zookeeper相关
启动zookeeper
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
关闭zookeeper
bin/zookeeper-server-stop.sh
broker相关
启动broker
nohup bin/kafka-server-start.sh config/server.properties &
关闭broker
bin/kafka-server-stop.sh
查看不同kafka 版本之间服务器和客户端的适配性
使用客户端的验证脚本,连接服务端的地址,可了解kafka服务器与客户端间的适配性。
[客户端目录] #bin/kafka-broker-api-versions.sh --bootstrap-server 192.168.1.108:9092
查看所有的broker的ID
查看broker的ID,需要使用zookeeper的脚本查看存储在zookeeper上的信息
bin/zookeeper-shell.sh 192.168.1.108:2181
ls /brokers/ids
查看broker所有的参数
bin/kafka-configs.sh --bootstrap-server 192.168.1.108:9092 --entity-type brokers --entity-name 1 --describe --all
查看broker的动态参数
kafka的配置参数主要分为3类,分别为:read-only
、per-broker
、cluster-wide
。需知道:
- read-only:可配置在文件中,需要重启broker才可生效
- per-broker、cluster-wide:两者均属于动态参数,无需重启即可修改。优先级 per-broker > cluster-wide
- entity-name选项需填写broker的id
- 如果设置的是per-broker级别的参数,使用查询集群的脚本是查不出来的;而使用查询指定broker的脚本,可以把动态参数对应的集群配置也查询出来
# per-broker
bin/kafka-configs.sh --bootstrap-server 192.168.1.108:9092 --entity-type brokers --entity-name 1 --describe
# cluster-wide
bin/kafka-configs.sh --bootstrap-server 192.168.1.108:9092 --entity-type brokers --entity-default --describe
设置动态参数
# per-broker
bin/kafka-configs.sh --bootstrap-server 192.168.1.108:9092 --entity-type brokers --entity-name 1 --alter --add-config num.network.threads=3,num.io.threads=8
# cluster-wide
bin/kafka-configs.sh --bootstrap-server 192.168.1.108:9092 --entity-type brokers --entity-default --alter --add-config num.network.threads=3,num.io.threads=8
删除设置的动态参数
# per-broker
bin/kafka-configs.sh --bootstrap-server 192.168.1.108:9092 --entity-type brokers --entity-name 1 --alter --delete-config num.network.threads,num.io.threads
# cluster-wide
bin/kafka-configs.sh --bootstrap-server 192.168.1.108:9092 --entity-type brokers --entity-default --alter --delete-config num.network.threads,num.io.threads
Topic相关
创建Topic
bin/kafka-topics.sh --bootstrap-server 192.168.1.108:9092 --create --topic mytopic
创建Topic时指定分区数和副本数
bin/kafka-topics.sh --bootstrap-server 192.168.1.108:9092 --create --topic mytopic --partitions 3 --replication-factor 3
查看Topic列表
bin/kafka-topics.sh --bootstrap-server 192.168.1.108:9092 --list
查看指定Topic信息
bin/kafka-topics.sh --bootstrap-server 192.168.1.108:9092 --describe --topic mytopic
删除Topic(异步操作)
bin/kafka-topics.sh --bootstrap-server 192.168.1.108:9092 --delete --topic mytopic
若topic迟迟无法删除,可手动操作。
- 删除zookeeper节点
/admin/delete_topics
下以待删除主题为名的znode。 - 手动删除该主题在磁盘上的分区目录。
- (可选)删除zookeeper的/controller节点,触发leader重选举以刷新controller的缓存。因为可能造成大面积的分区leader重选举,有一定的风险,可不进行。
增加Topic分区数
bin/kafka-topics.sh --bootstrap-server 192.168.1.108:9092 --alter --topic testtopic --partitions 3
增加Topic副本数
首先需要创建一个json文件,内容为:
{"version":1,"partitions":[{"topic":"testtopic","partition":0,"replicas":[3,1,2]},{"topic":"testtopic","partition":1,"replicas":[3,2,1]},{"topic":"testtopic","partition":2,"replicas":[1,3,2]}]}
接着使用kafka-reassign-partitions脚本(需要注意的是,设置常规主题级别参数需要使用--zookeeper连接;使用--bootstrap-server用于修改动态参数)
bin/kafka-reassign-partitions.sh --zookeeper 192.168.1.108:2181 --reassignment-json-file /reassign.json --execute
获取主题消息总数
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 192.168.1.108:9092 --time -2 --topic mytopic
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 192.168.1.108:9092 --time -1 --topic mytopic
通过计算两次执行结果的差值,累加各个分区即可得到消息总数。由上图,可知3个分区合计15条数据。
删除分区消息
删除消息前需要了解当前的LEO(日志末端位移)
bin/kafka-consumer-groups.sh --bootstrap-server 192.168.1.109:9092 --group mytopic-consumer-group --describe
假设现在需要删除0、1分区的消息,只保留最新一条,则需要创建这样的json文件
{"partitions":[{"topic":"mytopic","partition":0,"offset":7},{"topic":"mytopic","partition":1,"offset":6}],"version":1}
执行删除命令,系统会删除指定offset以下的数据。
bin/kafka-delete-records.sh --bootstrap-server 192.168.1.108:9092 --offset-json-file /test.json
可查证这两个分区最后都只剩下一条消息
查看消息文件底层数据
bin/kafka-dump-log.sh --files /tmp/kafka-logs/mytopic-0/00000000000000000000.log
bin/kafka-dump-log.sh --files /tmp/kafka-logs/mytopic-0/00000000000000000000.log --deep-iteration
如果需要把消息本身也打印出来,可执行下面语句
bin/kafka-dump-log.sh --files /tmp/kafka-logs/mytopic-2/00000000000000000008.log --print-data-log
查看日志路径磁盘占用情况
bin/kafka-log-dirs.sh --bootstrap-server 192.168.1.108:9092 --topic-list mytopic --describe
生产者相关
启动console-producer
bin/kafka-console-producer.sh --topic mytopic --bootstrap-server 192.168.1.108:9092
测试生产者性能
bin/kafka-producer-perf-test.sh --topic mytopic --num-records 100 --throughput -1 --record-size 1024 --producer-props bootstrap.servers=192.168.1.108:9092 acks=all linger.ms=2000
消费者相关
启动console-consumer
bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.108:9092 --topic mytopic --group mytopic-consumer-group --property print.key=true
如果在启动consumer时未指明消费者组,则会自动指定一个新的消费者组。
查看消费者组列表
bin/kafka-consumer-groups.sh --bootstrap-server 192.168.1.108:9092 --list
查看消费者组位移/消费进度查看
bin/kafka-consumer-groups.sh --bootstrap-server 192.168.1.109:9092 --group mytopic-consumer-group --describe
重设消费者组位移到最新
bin/kafka-consumer-groups.sh --bootstrap-server 192.168.1.109:9092 --group mytopic-consumer-group --reset-offsets --all-topics --to-latest --execute
删除消费者组
bin/kafka-consumer-groups.sh --bootstrap-server 192.168.1.108:9092 --delete --group console-consumer-85273
测试消费者性能
bin/kafka-consumer-perf-test.sh --broker-list 192.168.1.108:9092 --messages 10000000 --topic mytopic