《Kafka系列》命令行管理 Kafka

307 阅读4分钟

Kafka 提供了一些命令行工具,用于管理集群的变更,这些命令行工具可以完成一些基本的操作,主要有以下六部分内容: image.png

接着,再详细看下 Kafka 提供的命令行工具(基于 kafka-2.8.0 ,目录 kafka-2.8.0-src/bin )

image.png

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)导入偏移量

导入偏移量之前,必须先关闭所有的消费者,如果消费者群组处于活跃状态,它们不会读取新的偏移量,反而有可能将导入的偏移量覆盖掉。

4. kafka-reassign-partitions.sh