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.sh
shell脚本捆绑在下载的Kafka分发中。我们只需要传递--list
选项,以及集群的信息即可。例如,我们可以传递Zookeeper服务地址:
$ bin/kafka-topics.sh --list --zookeeper localhost:2181
users.registrations
users.verfications
如上图所示,--list
选项告诉kafka-topics.sh
shell脚本来列出所有主题。在这种情况下,我们有两个用于存储用户相关事件的主题。如果集群中没有主题,则命令会无声地返回,不显示任何结果。
同样,为了与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.sh
shell脚本会发出错误:
$ ./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将拥有自己的元数据集群。