这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战
相关:Apache Kafka 的本地部署 | 一文搞定 Kafka 常见术语
如果你还不知道如何在本地部署一个 Kafka 实例作为实验环境,请参考上面的文章。
操作前记得启动 ZooKeeper 和 Kafka 服务:
bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties
本文主要总结 Kafka 中用来管理 Topic 的常见操作。以下操作均在 Kafka 的目录下执行,它的脚本都在 bin/
目录中(针对 Windows 操作系统的 .bat
文件在 bin/windows/
中)。
针对 Topic 进行操作的指令,大多是通过 bin/kafka-topics.sh
来进行,执行这个脚本时,需要通过 --bootstrap-server
指定要连接到的 Kafka Broker,其后是具体的操作。
创建主题
创建主题的操作如下:
bin/kafka-topics.sh --bootstrap-server <host>:<port> --create --topic <topic_name> --partitions 1 --replication-factor 1
其中:
--bootstrap-server <host>:<port>
指定要连接的 Kafka Broker,这里需要提供 Kafka Broker 的服务地址和端口号。--create
代表要执行「创建」操作。--topic <topic_name>
指定即将创建的主题的名称--partitions 1
指定主题的分区数。--replication-factor 1
指定副本数。
查询主题
查询已经创建好的主题列表:
bin/kafka-topics.sh --bootstrap-server <host>:<port> --list
把创建操作的 --create
及之后的内容,替换成 --list
即可。
如果想要查看某个主题的详细信息,则可以执行:
bin/kafka-topics.sh --bootstrap-server <host>:<port> --describe --topic <topic_name>
执行结果类似一下内容:
Topic: fooTopic TopicId: EXpCrwSuTDCiuBtLh2V9gg PartitionCount: 1 ReplicationFactor: 1 Configs: segment.bytes=1073741824
Topic: fooTopic Partition: 0 Leader: 0 Replicas: 0 Isr: 0
包含了主题的详细信息以及各个分区的信息,这个命令需要指定查询的主题名称,如果不提供的话,则会展示所有可见的主题的详细信息。
增加主题的分区数
修改主题分区数的操作如下:
bin/kafka-topics.sh --bootstrap-server <host>:<port> --alter --topic <topic_name> --partitions <新分区数>
执行命令后,如果控制台什么都没有出现,则证明执行成功了,可以使用 --describe
来查看一下结果:
Topic: fooTopic TopicId: EXpCrwSuTDCiuBtLh2V9gg PartitionCount: 2 ReplicationFactor: 1 Configs: segment.bytes=1073741824
Topic: fooTopic Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: fooTopic Partition: 1 Leader: 0 Replicas: 0 Isr: 0
之所以把这个操作叫做「增加主题的分区数」而不是「修改主题的分区数」,是因为这里指定的分区数,一定要比现有的分区数大,否则会报错。报错信息类似一下内容:
ERROR org.apache.kafka.common.errors.InvalidPartitionsException: Topic currently has 2 partitions, which is higher than the requested 1.
(kafka.admin.TopicCommand$)
删除主题
删除主题使用 --delete
操作,需要指定要删除的主题名称;
bin/kafka-topics.sh --bootstrap-server <host>:<port> --delete --topic <topic_name>
这里值得注意的是,如果有副本所在的 Broker 处于宕机的状态,是无法完成删除的。
修改 Topic 级别的参数
bin/kafka-configs.sh --zookeeper <host>:<port> --entity-type topics --entity-name <topic_name> --alter --add-config <参数名>=<参数值>
注意这里并没有通过 --bootstrap-server
指定 Broker 节点的连接,而至通过 --zookeeper
指定了 ZooKeeper 的连接。