目录
- 前言
- 脚本列表
- 脚本简介
- kafka-broker-api-versions.sh
- kafka-console-producer.sh 和 kafka-console-consumer.sh
- kafka-producer-perf-test.sh 和 kafka-consumer-perf-test.sh
- kafka-configs.sh
- kafka-dump-log.sh
- kafka-server-start.sh 和 kafka-server-stop.sh
- kafka-consumer-groups.sh
- kafka-topics.sh
- kafka-log-dirs.sh
- kafka-reassign-partitions.sh
- kafka-delete-records.sh
- kafka-mirror-maker.sh
- kafka-metadata-quorum.sh
- kafka-metadata-shell.sh
- kafka-run-class.sh
- kafka-storage.sh
前言
脚本列表
Kafka 脚本工具是 Apache Kafka 提供的一系列命令行工具,用于管理、监控和操作 Kafka 集群。这些工具位于 Kafka 安装目录的 bin 目录下(Windows 系统为 .bat 文件,Linux/Mac 为 .sh 文件)。以下是一些核心脚本工具的详细介绍
bin/kafka-acls.sh
bin/kafka-broker-api-versions.sh ✅
bin/kafka-client-metrics.sh
bin/kafka-cluster.sh
bin/kafka-configs.sh ✅
bin/kafka-console-consumer.sh ✅
bin/kafka-console-producer.sh ✅
bin/kafka-consumer-groups.sh ✅
bin/kafka-consumer-perf-test.sh ✅
bin/kafka-delegation-tokens.sh
bin/kafka-delete-records.sh ✅
bin/kafka-dump-log.sh ✅
bin/kafka-e2e-latency.sh
bin/kafka-features.sh
bin/kafka-get-offsets.sh
bin/kafka-jmx.sh
bin/kafka-leader-election.sh
bin/kafka-log-dirs.sh ✅
bin/kafka-metadata-quorum.sh ✅
bin/kafka-metadata-shell.sh ✅
bin/kafka-mirror-maker.sh ✅
bin/kafka-producer-perf-test.sh ✅
bin/kafka-reassign-partitions.sh ✅
bin/kafka-replica-verification.sh
bin/kafka-run-class.sh ✅
bin/kafka-server-start.sh ✅
bin/kafka-server-stop.sh ✅
bin/kafka-storage.sh ✅
bin/kafka-streams-application-reset.sh
bin/kafka-topics.sh ✅
bin/kafka-transactions.sh
bin/kafka-verifiable-consumer.sh
bin/kafka-verifiable-producer.sh
脚本简介
kafka-broker-api-versions.sh
kafka-broker-api-versions.sh 是 Kafka 自带的一个重要脚本工具,用于查询 Kafka Broker 支持的 API 版本信息。这在客户端与 Broker 版本不一致或排查兼容性问题时非常有用。
- 基本功能
- 查询 Broker 支持的 API 版本:每个 Kafka API(如 Produce、Fetch、Metadata 等)都有版本号,不同版本的 Kafka 支持的 API 版本范围不同。
- 验证客户端与 Broker 的兼容性:确保客户端使用的 API 版本在 Broker 支持的范围内,避免因版本不兼容导致的错误。
我们以第一行为例:Produce(0): 0 to 10 [usable: 10],
“Produce”表示 Produce 请求,生产者生产消息本质上就是向 Broker 端发送 Produce 请求。该请求是 Kafka 所有请求类型中的第一号请求,因此序号是 0。后面的“0 to 10”表示 Produce 请求在 Kafka 3.7.0 中总共有 10 个版本,序号分别是 0 到 10。“usable:10”表示当前连入这个 Broker 的客户端 API 能够使用的版本号是 10,即最新的版本。
这个脚本还有一个特殊用途可以协助排查Broker节点服务启动状态:
./bin/kafka-broker-api-versions.sh -bootstrap-server 192.168.37.10:9092 2>/dev/null |egrep ‘^([0-9]{1,3}.){3}[0-9]{1,3}’
kafka-console-producer.sh 和 kafka-console-consumer.sh
生产消息使用 kafka-console-producer 脚本
快速地消费主题中的数据来验证消息是否存在,运行 kafka-console-consumer 脚本
占位! 后续单独详细讲解。。。
kafka-producer-perf-test.sh 和 kafka-consumer-perf-test.sh
生产者和消费者的性能测试工具,非常实用
占位! 后续单独详细讲解。。。
kafka-configs.sh
用于查看、修改和管理 Kafka 集群的配置参数。这些参数可以应用于主题(Topics)、broker 节点、用户或客户端 ID 等实体。
占位! 后续单独详细讲解。。。
kafka-dump-log.sh
kafka-dump-log.sh 是 Kafka 自带的一个工具,用于解析和查看 Kafka 日志文件(.log、.index、.timeindex 等)的内容。它在排查消息丢失、位移异常、消息格式问题时非常有用。
占位! 后续单独详细讲解。。。
kafka-server-start.sh 和 kafka-server-stop.sh
kafka-server-start.sh 和 kafka-server-stop.sh 是 Kafka 集群的核心启动和停止脚本,用于管理 Kafka Broker 进程。
kafka-consumer-groups.sh
用于管理和监控消费者组(Consumer Groups)。消费者组是 Kafka 实现消息广播和负载均衡的核心机制,该工具可帮助你查看消费进度、重置偏移量、诊断消费滞后等问题。
占位! 后续单独详细讲解。。。
kafka-topics.sh
用于管理主题(Topics)。主题是 Kafka 中消息的逻辑分类,通过该工具可以创建、查看、修改和删除主题,配置分区数、副本因子等关键参数。
占位! 后续单独详细讲解。。。
kafka-log-dirs.sh
用于管理和查询 Broker 的日志目录(Log Directories)信息。这些日志目录存储了 Kafka 主题的实际消息数据。通过该工具,你可以查看日志目录使用情况、迁移分区数据,以及验证磁盘空间分配。
占位! 后续单独详细讲解。。。
kafka-reassign-partitions.sh
脚本用于执行分区副本迁移以及副本文件路径迁移。
占位! 后续单独详细讲解。。。
kafka-delete-records.sh
用于有选择性地删除主题分区中的消息。与基于时间或大小的自动清理策略不同,该工具允许你精确控制删除范围,例如按偏移量删除特定消息段。
鉴于 Kafka 本身有自己的自动消息删除策略,这个脚本的实际出场率并不高。
kafka-mirror-maker.sh
用于在不同 Kafka 集群之间复制消息,实现数据同步、灾备、多数据中心部署等场景。
占位! 后续单独详细讲解。。。
kafka-metadata-quorum.sh
Kafka 3.3+ 版本引入的工具,专门用于管理和查询 KRaft 模式(Kafka Raft Metadata)下的元数据仲裁(Quorum)信息。
./bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.37.10:9092 describe --replication
[root@test-10 kafka_2.13-3.7.0]# ./bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.37.10:9092 describe --replication
NodeId LogEndOffset Lag LastFetchTimestamp LastCaughtUpTimestamp Status
1 18753 0 1752821699295 1752821699295 Leader
./bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.37.10:9092 describe --status
[root@test-10 kafka_2.13-3.7.0]# ./bin/kafka-metadata-quorum.sh --bootstrap-server 192.168.37.10:9092 describe --status
ClusterId: BJODTrqBTbCBnwSG2VszJg
LeaderId: 1
LeaderEpoch: 4
HighWatermark: 18853
MaxFollowerLag: 0
MaxFollowerLagTimeMs: 0
CurrentVoters: [1]
CurrentObservers: []
kafka-metadata-shell.sh
用于交互式检查集群元数据分区的状态。
./bin/kafka-metadata-shell.sh --snapshot
data/__cluster_metadata-0/00000000000000015163-0000000004.checkpoint
Unexpected error: Unable to lock /data/middleware/kafka_2.13-3.7.0/data. Please ensure that no broker or controller process is using this directory before proceeding.
解决报错,需要先停止kafka 服务
命令执行成功后,可以交互式查询元数据信息。
正如您所看到的,我们已经进入了一个 shell 环境。您可以通过运行 help 命令来查看可用的命令
./bin/kafka-metadata-shell.sh --snapshot data/__cluster_metadata-0/00000000000000015163-0000000004.checkpoint ls image/topics/byName
kafka-run-class.sh
用这个脚本执行任何带 main 方法的 Kafka 类。在 Kafka 早期的发展阶段,很多工具类都没有自己专属的 SHELL 脚本,比如刚才提到的 kafka-dump-log,你只能通过运行 kafka-run-class kafka.tools.DumpLogSegments 的方式来间接实现。如果你用文本编辑器打开 kafka-dump-log.sh,你会发现它实际上调用的就是这条命令。后来社区逐渐为这些重要的工具类都添加了专属的命令行脚本,现在 kafka-run-class 脚本的出场率大大降低了。
kafka-storage.sh
kafka-storage.sh 是 Kafka 3.0 及以上版本引入的核心工具,用于管理 Kafka 的存储层,该工具负责初始化存储目录。
初始化存储目录(KRaft 模式)
# 生成 UUID 并初始化存储目录
./kafka-storage.sh random-uuid
# 输出示例:gqJ4Y9o0R7aQeVpXtZkFjw
# 使用生成的 UUID 初始化存储
./kafka-storage.sh format \
-t gqJ4Y9o0R7aQeVpXtZkFjw \ # 替换为实际 UUID
-c config/kraft/server.properties
参考案例: kafka 单机部署指南(KRaft 版本)