Kafka 提供了一些命令行工具,用于管理集群的变更,这些命令行工具可以完成一些基本的操作,主要有以下六部分内容:
接着,再详细看下 Kafka 提供的命令行工具(基于 kafka-2.8.0 ,目录 kafka-2.8.0-src/bin )
1. kafka-topics.sh
1)创建主题
kafka-topics.sh --zookeeper <zookeeper connect> --create --topic <string>
--replication-factor <integer> --partitions <integer>
- --disable-rack-aware,不需要基于机架信息的分配策略,可以指定参数
- --if-not-exists,忽略重复创建主题的错误
2)增加分区
kafka-topics.sh --zookeeper <zookeeper connect>
--alter --topic <string> --partitions <integer>
目的:主题基于分区进行伸缩和复制,增加分区主要是为了扩展主题容量或者降低单个分区的吞吐量。
- 基于键的主题,如果改变分区数量,键到分区之间的映射也会发生变化,所以在一开始就设置好分区数量,避免修改
- --if-exists参数,主题不存在的错误会被忽略,不建议使用
3)减少分区
无法减少主题分区数量,如果一定要减少分区数量,只能删除整个主题,然后重新创建
4)删除主题
kafka-topics.sh --zookeeper <zookeeper connect>
--delete --topic <integer>
前提:broker 的 delete.topic.enable 参数必须设置为 true,如果为 false 则删除的请求会被忽略
- 如果一个主题不再被使用,只要它还存在于集群中,就会占用一定数量的磁盘空间和文件句柄,删除它就可以释放被占用的资源。
- 删除主题回丢弃主题里的所有数据,操作不可逆
5)列出主题
kafka-topics.sh --zookeeper <zookeeper connect>
--list
6)列出主题详情
kafka-topics.sh --zookeeper <zookeeper connect> --describe
describe还提供了一些参数,用于过滤输出结果(不要为这些参数指定 --topic、list)
- --topic-with-overrides,找出所有包含覆盖配置的主题,它只会列出包含了与集群不一样配置的主题
- --under-replicated-partitions,列出所有包含不同步副本的分区
- --unavailable-partitions,列出所有没有首领的分区,这些分区已经处于离线状态,生产者和消费者不可用
7)列出非同步分区
kafka-topics.sh --zookeeper <zookeeper connect> --describe
--under-replicated
如果多个 broker 都出现了非同步分区,则单个 broker 或者集群可能有问题
2. kafka-consumer-groups.sh
在 Kafka中,有两个地方保存着消费者群组的信息
- 旧版本:保存在 zookeeper 上,通过 --zookeeper 参数指定 Zookeeper 地址(新版本依然可用)
- 新版本:保存在broker上,通过 --bootstrap-server 参数指定 broker 的主机名和端口号 kafka-consumer-groups.sh 工具可用于列出上述两种消费者群组。在旧版本上,也可用于删除消费者群组和偏移量信息。
1)列出并描述群组
- 旧版本
kafka-consumer-groups.sh --zookeeper <zookeeper connect> --list
- 新版本
kafka-consumer-groups.sh --new-consumer --bootstrap-server
<kafka connect> --list
对于列出的任意群组,使用 --describe 代替 --list,并通过 --group 指定特定的群组,就可以获取该群组的详细信息,它会列出群组里所有主题的信息和每个分区的偏移量
2)删除群组
仅旧版本的消费者客户端才支持删除群组的操作,该操作将从 Zookeeper 上移除整个群组,包括所有已保存的偏移量。在执行该操作之前,必须关闭所有的消费者。
kafka-consumer-groups.sh --zookeeper
<kafka connect> --delete --group <string>
也可以在不删除整个群组的情况下删除单个主题的偏移量(也必须先关闭消费者,不让它们读取到即将被删除的主题)
kafka-consumer-groups.sh --zookeeper
<kafka connect> --delete --group <string>
--topic <string>
3. kafka-run-class.sh
目前管理工具只对提交到 Zookeeper 的偏移量可用,还没有工具可以管理由消费者客户端提交到 Kafka 的偏移量,为了能管理提交到 Kafka 的消费者群组偏移量,需要在客户端使用相应的 API 来提交群组的偏移量
1)导出偏移量
Kafka没有为导出偏移量提供现成的脚本,不过可以使用 kafka-run-class.sh 脚本来调用底层Java类实现。在导出偏移量时,会生成一个文件,文件里包含了分区和偏移量的信息,偏移量以一种导入工具能够识别的格式保存在文件里,每个分区在文件里占用一行。
2)导入偏移量
导入偏移量之前,必须先关闭所有的消费者,如果消费者群组处于活跃状态,它们不会读取新的偏移量,反而有可能将导入的偏移量覆盖掉。