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

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

相关:Apache Kafka 的本地部署

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
arduino复制代码➜  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 查询到,比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
vbnet复制代码➜ 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 之间的适配行。执行结果如下(控制台输出还有很多行,用省略号代替了):

1
2
3
4
5
6
7
less复制代码➜ 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):

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

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

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

1
css复制代码➜ 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

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

比如下面的脚本:

1
css复制代码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 个字节,得到如下结果:

1
matlab复制代码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 之内,这是性能判断的重要依据。

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

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

结果如下:

1
2
lua复制代码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

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

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

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

1
less复制代码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 查看。结果格式如下:

1
2
3
4
5
less复制代码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 脚本除了之前介绍过的用途,还可以用来查看消费者组的位移,命令如下:

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

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

1
2
sql复制代码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> 即可。

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%