1 主题操作
使用 kafka-topics.sh
工具可以执行主题的大部分操作(配置变更部分已经被移动到 kafka-configs.sh
工具当中)。我们可以用 kafka-topics.sh
创建、修改、 删除和查看集群里的主题。要使用该工具的全部功能,需要通过 --bootstrap-server
参数提供 Kafka broker 的连接字符串 。
1.1 创建主题 --create
在集群里创建一个主题需要用到 3 个参数。这些参数是必须提供的,尽管有些已经有了 broker 级别的默认值。
-
主题名字
想要创建的主题的名字。 -
复制系数
主题的副本数量。 -
分区
主题的分区数量。
指定主题配置
可以在创建主题时显式地指定复制系数或者对配置进行覆盖 ,不过我们不打算在这里介绍如何做到这些。稍后会介绍如何进行配置覆盖 , 它们是通过向 kafka-topics.sh
传递 --config
参数来实现的。本章还会介绍分区的重分配。
主题名字
可以包含字母、数字、下划线以及英文状态下的破折号和句号
。
注意:主题名字的开头部分包含两个下划线是合法的,但不建议这么做。具有这种格式的主题一般是集群的内部主题( 比如 __consumer_offsets
主题用于保存消费者群组的偏移量)。 也不建议在单个集群里使用英文状态下的句号和下划线来命名,因为主题的名字会被用在度量指标上,句号会被替换成下划线(比如“topic.1"会变成“topic_1")。
试着运行下面的命令 :kafka-topics.sh --bootstrap-server <kafka connect> --create -- topic <string> --replication-factor <integer> --partitions <integer>
这个命令将会创建一个主题,主题的名字为指定的值 , 并包含了指定数量的分区。集群会为每个分区创建指定数量的副本。
如果为集群指定了基于机架信息的副本分配策略, 那么分区的副本会分布在不同的机架上。如果不需要基于机架信息的分配策略,可以指定参数 --disable-rack-aware
。
示例 :使用以下命令创建一个叫作 topic1 的主题 , 主题包含 2 个分区,每个分区拥有1个副本。
[root@docker01 ~]# /usr/local/kafka_2.13-2.6.0/bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic topic1 --replication-factor 1 --partitions 2
Created topic topic1.
[root@docker01 ~]#
忽略重复创建主题的错误
在自动化系统里调用这个脚本时,可以使用 --if-not-exists
参数,这样即使主题已经存在
,也不会抛出重复创建主题的错误。
1.2 列出主题详细信息 --describe
主题工具还能用来获取主题的详细信息。信息里包含了分区数量 、主题的覆盖配置以及每个分区的副本清单。 如果通过 --topic
参数指定特定的主题, 就可以只列出指定主题的详细信息。
示例