Kafka 目录里的脚本那么多,它们都是用来干什么的?

这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战

相关:Apache Kafka 的本地部署

以下是 Apacke Kafka 2.13 安装目录中 bin/ 中的脚本文件列表:

➜  tree -L 1 bin

bin
├── connect-distributed.sh
├── connect-mirror-maker.sh
├── connect-standalone.sh
├── kafka-acls.sh
├── kafka-broker-api-versions.sh
├── kafka-cluster.sh
├── kafka-configs.sh
├── kafka-console-consumer.sh
├── kafka-console-producer.sh
├── kafka-consumer-groups.sh
├── kafka-consumer-perf-test.sh
├── kafka-delegation-tokens.sh
├── kafka-delete-records.sh
├── kafka-dump-log.sh
├── kafka-features.sh
├── kafka-get-offsets.sh
├── kafka-leader-election.sh
├── kafka-log-dirs.sh
├── kafka-metadata-shell.sh
├── kafka-mirror-maker.sh
├── kafka-producer-perf-test.sh
├── kafka-reassign-partitions.sh
├── kafka-replica-verification.sh
├── kafka-run-class.sh
├── kafka-server-start.sh
├── kafka-server-stop.sh
├── kafka-storage.sh
├── kafka-streams-application-reset.sh
├── kafka-topics.sh
├── kafka-transactions.sh
├── kafka-verifiable-consumer.sh
├── kafka-verifiable-producer.sh
├── trogdor.sh
├── windows
├── zookeeper-security-migration.sh
├── zookeeper-server-start.sh
├── zookeeper-server-stop.sh
└── zookeeper-shell.sh

1 directory, 37 files
复制代码

其中有一个叫做 windows 的目录,里面是 Windows 系统下使用的 .bat 批处理文件,其余都是 .sh 脚本文件,包含之前的文章介绍过的几个脚本:

  • zookeeper-server-start.sh 用来启动 ZooKeeper 服务
  • kafka-server-start.sh 用来启动 Kafka Broker
  • kafka-topics.sh 用来操作 Topics
  • kafka-configs.sh 用来修改 Broker 端的动态配置等
  • kafka-consumer-groups 前面的文章中我们用它来重设消费者组的位移等

这些脚本中,zookeeper 开头的几个脚本是用来操作 ZooKeeper 的,connect 开头的几个脚本与 Kafka Connect 有关,其余是大量的与 Kafka 相关的脚本。

这些脚本的文档,都可以通过文件名加 --help 查询到,比如:

➜ bin/kafka-log-dirs.sh --help

This tool helps to query log directory usage on the specified brokers.
Option                                  Description
------                                  -----------
--bootstrap-server <String: The server  REQUIRED: the server(s) to use for
  (s) to use for bootstrapping>           bootstrapping
--broker-list <String: Broker list>     The list of brokers to be queried in
                                          the form "0,1,2". All brokers in the
                                          cluster will be queried if no broker
                                          list is specified
--command-config <String: Admin client  Property file containing configs to be
  property file>                          passed to Admin Client.
--describe                              Describe the specified log directories
                                          on the specified brokers.
--help                                  Print usage information.
--topic-list <String: Topic list>       The list of topics to be queried in
                                          the form "topic1,topic2,topic3". All
                                          topics will be queried if no topic
                                          list is specified (default: )
--version                               Display Kafka version.
复制代码

本文主要介绍这些脚本中常用的几个

kafka-broker-api-versions

这个脚本用于验证不同版本的 Broker 和 Consumer 之间的适配行。执行结果如下(控制台输出还有很多行,用省略号代替了):

➜ bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092

192.168.1.21:9092 (id: 0 rack: null) -> (
	Produce(0): 0 to 9 [usable: 9],
	Fetch(1): 0 to 12 [usable: 12],
	ListOffsets(2): 0 to 7 [usable: 7],
        ......
复制代码

这里列出了各种请求的适配情况,我们以 Produce(0): 0 to 9 [usable: 9] 为例来详细介绍。

  • Produce 表示 Produce 请求,生产者向 Broker 发送消息其实就是在发送 Produce 请求。
  • (0) 表示的是序号
  • 0 to 9 表示在当前的 Broker 中,支持 0 到 9 共 10 个版本的 Producer 请求。
  • [usable: 9] 表示当前的客户端使用的是版本序号为 9 的请求。这里的客户端指的其实就是我们使用的 kafka-broker-api-versions 脚本。如果你使用不同版本 Kafka 中的 kafka-broker-api-versions 脚本验证同一个 Broker 实例,这里会得到不同的结果。

kafka-console-consumer 和 kafka-console-producer

在之前的文章(Apache Kafka 的本地部署)中,曾经使用这两个命令来验证 Kafka 是否部署和运行成功。它们分别可以用来生产和消费消息。

使用一条简单的指令就可以向 Kafka 提交消息(记得提前创建好 Topic):

➜ bin/kafka-console-producer.sh --topic hello-events --bootstrap-server localhost:9092
复制代码

如果要提供多个 Broker 节点,可以将 --bootstrap-server 替换成 --broker-list,多个节点的地址用逗号隔开即可。

如果要消费一个主题的消息,可以使用如下方式:

➜ bin/kafka-console-consumer.sh --topic hello-events --from-beginning --bootstrap-server localhost:9092
复制代码

执行后,消息会被打印到控制台上。

这里有一个 --from-beginning 参数,它代表从当前最早的位移开始消费消息,相当于使用了 Earliest 策略重设位移(参考:Kafka 消费者组位移重设的几种方式

这两个用于生产和消费消息的命令,一般很少用在实际的场景中,更多的是用来测试。

kafka-producer-perf-test 和 kafka-consumer-perf-test

这两个命令也是生产者和消费者对应的命令成对出现的,用于对生产和消费消息的性能做测试。

比如下面的脚本:

bin/kafka-producer-perf-test.sh --topic hello-events --num-records 100000 --throughput -1 --record-size 1024 --producer-props bootstrap.servers=localhost:9092
复制代码

向指定的 Topic 发送了十万条消息(这个数量太少了,这里仅做演示),每条 1024 个字节,得到如下结果:

100000 records sent, 65919.578115 records/sec (64.37 MB/sec), 2.89 ms avg latency, 253.00 ms max latency, 0 ms 50th, 20 ms 95th, 22 ms 99th, 23 ms 99.9th.
复制代码

这里展示了每秒发送的消息数、吞吐量、平均延时,以及几个分位数,我们可以重点关注末尾的分位数,23 ms 99.9th 表示 99.9% 的消息延时都在 23ms 之内,这是性能判断的重要依据。

消费端的性能测试命令会稍微简单一些:

bin/kafka-consumer-perf-test.sh --broker-list localhost:9092 --messages 100000 --topic hello-events
复制代码

结果如下:

start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec, rebalance.time.ms, fetch.time.ms, fetch.MB.sec, fetch.nMsg.sec
2021-11-26 16:31:12:691, 2021-11-26 16:31:17:028, 98.1396, 22.6285, 100495, 23171.5472, 3594, 743, 132.0857, 135255.7201
复制代码

只有一些时间和吞吐量的数据,并没有分位数的结果。

kafka-dump-log

用来查看消息文件的数据,或者读取到一个文件中。

bin/kafka-dump-log.sh --files /tmp/kafka-logs/hello-events-0/00000000000000000000.log
复制代码

使用这个脚本需要指定一个 .log 文件的路径,读取结果的内容都是一条条类似如下格式的内容:

baseOffset: 1035315 lastOffset: 1035329 count: 15 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 0 isTransactional: false isControl: false position: 1073690676 CreateTime: 1637914980747 size: 15556 magic: 2 compresscodec: none crc: 4007605223 isvalid: true
复制代码

包含了消息集合位移范围、数量、创建时间、压缩算法等信息。如果想看每一条的具体信息,可以通过在命令之后添加 --deep-iteration 查看。结果格式如下:

baseOffset: 182055 lastOffset: 182069 count: 15 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 0 isTransactional: false isControl: false position: 188803172 CreateTime: 1637914971926 size: 15556 magic: 2 compresscodec: none crc: 2670957992 isvalid: true
| offset: 182055 CreateTime: 1637914971926 keySize: -1 valueSize: 1024 sequence: -1 headerKeys: []
| offset: 182056 CreateTime: 1637914971926 keySize: -1 valueSize: 1024 sequence: -1 headerKeys: []
| offset: 182057 CreateTime: 1637914971926 keySize: -1 valueSize: 1024 sequence: -1 headerKeys: []
(省略部分类似的内容)
复制代码

增加了每一条消息的具体信息,你甚至还可以通过加 --print-data-log 查看到消息的具体内容。

kafka-consumer-groups

kafka-consumer-groups 脚本除了之前介绍过的用途,还可以用来查看消费者组的位移,命令如下:

bin/kafka-consumer-groups.sh --describe --all-groups --bootstrap-server localhost:9092
复制代码

执行后可以得到如下结果:

GROUP               TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID     HOST            CLIENT-ID
perf-consumer-27937 hello-events    0          100495          3513680         3413185         -               -               -
复制代码

这个命令会列出所有消费者组的信息,如果想要查看单个消费者组的信息,把其中的 --all-groups 替换成 --group <group_id> 即可。

Guess you like

Origin juejin.im/post/7034806241008287751