这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战
以下是 Apacke Kafka 2.13 安装目录中 bin/
中的脚本文件列表:
1 | arduino复制代码➜ tree -L 1 bin |
其中有一个叫做 windows
的目录,里面是 Windows 系统下使用的 .bat
批处理文件,其余都是 .sh
脚本文件,包含之前的文章介绍过的几个脚本:
zookeeper-server-start.sh
用来启动 ZooKeeper 服务kafka-server-start.sh
用来启动 Kafka Brokerkafka-topics.sh
用来操作 Topicskafka-configs.sh
用来修改 Broker 端的动态配置等kafka-consumer-groups
前面的文章中我们用它来重设消费者组的位移等
这些脚本中,zookeeper
开头的几个脚本是用来操作 ZooKeeper 的,connect
开头的几个脚本与 Kafka Connect 有关,其余是大量的与 Kafka 相关的脚本。
这些脚本的文档,都可以通过文件名加 --help
查询到,比如:
1 | vbnet复制代码➜ bin/kafka-log-dirs.sh --help |
本文主要介绍这些脚本中常用的几个
kafka-broker-api-versions
这个脚本用于验证不同版本的 Broker 和 Consumer 之间的适配行。执行结果如下(控制台输出还有很多行,用省略号代替了):
1 | less复制代码➜ bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092 |
这里列出了各种请求的适配情况,我们以 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 | 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 |
只有一些时间和吞吐量的数据,并没有分位数的结果。
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 | 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 |
增加了每一条消息的具体信息,你甚至还可以通过加 --print-data-log
查看到消息的具体内容。
kafka-consumer-groups
kafka-consumer-groups 脚本除了之前介绍过的用途,还可以用来查看消费者组的位移,命令如下:
1 | css复制代码bin/kafka-consumer-groups.sh --describe --all-groups --bootstrap-server localhost:9092 |
执行后可以得到如下结果:
1 | sql复制代码GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID |
这个命令会列出所有消费者组的信息,如果想要查看单个消费者组的信息,把其中的 --all-groups
替换成 --group <group_id>
即可。
本文转载自: 掘金