我有一个Kafka https://kafka.apache.org/集群运行有 2 个分区。我一直在寻找一种将分区计数增加到 3 的方法。但是,我不想丢失有关该主题的现有消息。我尝试停下来Kafka https://kafka.apache.org/,修改server.properties
文件将分区数量增加到 3 并重新启动 Kafka。然而,这似乎并没有改变任何事情。使用卡夫卡ConsumerOffsetChecker
,我仍然看到它只使用 2 个分区。这Kafka https://kafka.apache.org/我使用的版本是0.8.2.2。在0.8.1版本中,曾经有一个脚本叫做kafka-add-partitions.sh
,我想这可能会起作用。然而,我在 0.8.2 中没有看到任何这样的脚本。
我确实尝试过创建一个全新的主题,对于这个主题,它似乎确实根据 中的更改使用了 3 个分区server.properties
文件。然而,对于现有的话题,它似乎并不在意。
看起来你可以使用this https://kafka.apache.org/documentation.html改为脚本:
bin/kafka-topics.sh --zookeeper zk_host:port/chroot --alter --topic my_topic_name
--partitions 40
在代码中看起来他们做了同样的事情:
AdminUtils.createOrUpdateTopicPartitionAssignmentPathInZK(topic, partitionReplicaList, zkClient, true)
kafka-topics.sh
执行this https://github.com/apache/kafka/blob/0.8.2/core/src/main/scala/kafka/admin/AdminUtils.scala#LC133一段代码以及添加分区命令 https://github.com/apache/kafka/blob/0.8/core/src/main/scala/kafka/admin/AddPartitionsCommand.scala由 kafka-add-partition 脚本使用。
但是,使用 key 时必须注意重新分区:
请注意,分区的一种用例是语义分区
数据,以及添加分区不会更改现有数据的分区因此,如果消费者依赖这一点,这可能会打扰他们
分割。也就是说,如果数据按以下方式分区hash(key) % number_of_partitions
那么这个分区可能是
通过添加分区进行混洗,但 Kafka 不会尝试这样做
以任何方式自动重新分配数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)