1. 概述

在这篇快速教程中,我们将学习如何列出Apache Kafka集群中的所有主题。

首先,我们将在三个步骤中设置一个单节点的Apache Kafka集群:下载Kafka和Zookeeper、启动Zookeeper服务、启动Kafka服务。

2. 设置Kafka

在列出Kafka集群中的所有主题之前,让我们按照以下三个步骤设置测试用的单节点Kafka集群:

下载Kafka和Zookeeper

启动Zookeeper服务

启动Kafka服务

我们应该确保从Kafka官网下载正确的Kafka版本。下载完成后,我们应解压缩下载的档案:

$ tar xvf kafka_2.13-2.6.0.tgz

Kafka使用Apache Zookeeper来管理其集群元数据,因此我们需要运行一个正在运行的Zookeeper集群。

为了测试目的,我们可以使用bin/zookeeper-server-start.sh脚本在bin目录中运行单节点Zookeeper实例:

$ cd kafka_2.13-2.6.0 # extracted directory
$ ./bin/zookeeper-server-start.sh config/zookeeper.properties

这将启动一个监听端口2181的Zookeeper服务。之后,我们可以使用另一个脚本来运行Kafka服务器:

$ ./bin/kafka-server-start.sh config/server.properties

过了一会儿,一个Kafka代理将启动。现在,让我们向这个简单的集群添加一些主题:

$ bin/kafka-topics.sh --create --topic users.registrations --replication-factor 1 \
  --partitions 2  --zookeeper localhost:2181
$ bin/kafka-topics.sh --create --topic users.verfications --replication-factor 1 \
  --partitions 2  --zookeeper localhost:2181

现在一切都准备好了,让我们看看如何列出Kafka主题。

3. 列出主题

要列出Kafka集群中的所有主题,我们可以使用包含集群信息的bin/kafka-topics.shshell脚本捆绑在下载的Kafka分发中。我们只需要传递--list选项,以及集群的信息即可。例如,我们可以传递Zookeeper服务地址:

$ bin/kafka-topics.sh --list --zookeeper localhost:2181
users.registrations
users.verfications

如上图所示,--list选项告诉kafka-topics.shshell脚本来列出所有主题。在这种情况下,我们有两个用于存储用户相关事件的主题。如果集群中没有主题,则命令会无声地返回,不显示任何结果。

同样,为了与Kafka集群进行通信,我们需要使用--zookeeper选项传递Zookeeper服务URL:

甚至可能通过使用--bootstrap-server选项直接传递Kafka集群地址

$ ./bin/kafka-topics.sh --bootstrap-server=localhost:9092 --list
users.registrations
users.verfications

我们的单实例Kafka集群监听9092端口,所以我们指定了"localhost:9092"作为bootstrap服务器。简而言之,bootstrap服务器是Kafka代理。

如果我们不传递与Kafka集群进行通信所需的信息,kafka-topics.shshell脚本会发出错误:

$ ./bin/kafka-topics.sh --list
Exception in thread "main" java.lang.IllegalArgumentException: Only one of --bootstrap-server or --zookeeper must be specified
        at kafka.admin.TopicCommand$TopicCommandOptions.checkArgs(TopicCommand.scala:721)
        at kafka.admin.TopicCommand$.main(TopicCommand.scala:52)
        at kafka.admin.TopicCommand.main(TopicCommand.scala)

如上图所示,shell脚本要求我们传递--bootstrap-server--zookeeper选项。

4. 主题详情

一旦找到了主题列表,我们就可以查看某个特定主题的详细信息。为此,我们可以使用--describe --topic <主题名称>组合选项

$ ./bin/kafka-topics.sh --bootstrap-server=localhost:9092 --describe --topic users.registrations
Topic: users.registrations      PartitionCount: 2       ReplicationFactor: 1    Configs: segment.bytes=1073741824
        Topic: users.registrations      Partition: 0    Leader: 0       Replicas: 0     Isr: 0
        Topic: users.registrations      Partition: 1    Leader: 0       Replicas: 0     Isr: 0

这些详细信息包括关于指定主题的信息,例如分区数、副本数等。与其他命令一样,我们必须传递集群信息或Zookeeper地址。否则,我们将无法与集群进行通信。

5. 结论

在这篇简短的文章中,我们学习了如何列出Kafka集群中的所有主题。途中,我们看到了如何设置一个简单的单节点Kafka集群。

目前,Apache Kafka使用Zookeeper来管理其集群元数据。然而,这很快将发生变化,作为KIP-500的一部分,Kafka将拥有自己的元数据集群。