Kafka2.7常用脚本命令

383 阅读4分钟

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-onlyper-brokercluster-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迟迟无法删除,可手动操作。

  1. 删除zookeeper节点/admin/delete_topics下以待删除主题为名的znode。
  2. 手动删除该主题在磁盘上的分区目录。
  3. (可选)删除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