是否可以将分区添加到 Kafka 0.8.2 中的现有主题

新手上路,请多包涵

我有一个运行 2 个分区的 Kafka 集群。我正在寻找一种将分区数增加到 3 的方法。但是,我不想丢失有关该主题的现有消息。我尝试停止 Kafka ,修改 server.properties 文件以将分区数增加到 3 并重新启动 Kafka。然而,这似乎并没有改变什么。使用 Kafka ConsumerOffsetChecker ,我仍然看到它只使用了 2 个分区。我使用的 Kafka 版本是 0.8.2.2。在 0.8.1 版本中,曾经有一个名为 kafka-add-partitions.sh 的脚本,我想这可能会奏效。但是,我在 0.8.2 中没有看到任何这样的脚本。

  • 有没有办法做到这一点?

我确实尝试过创建一个全新的主题,对于那个主题,它似乎确实根据 server.properties 文件中的更改使用了 3 个分区。但是,对于现有的主题,它似乎并不关心。

原文由 Asif Iqbal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 694
2 个回答

看起来您可以改用 脚本:

 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 执行 这段 代码以及 kafka-add-partition 脚本使用的 AddPartitionsCommand

但是,您必须在使用密钥时注意重新分区:

请注意,分区的一个用例是对数据进行语义分区,并且 添加分区不会更改现有数据的分区, 因此如果消费者依赖该分区,这可能会打扰消费者。也就是说,如果数据按 hash(key) % number_of_partitions 进行分区,那么这个分区可能会通过添加分区而被打乱,但 Kafka 不会尝试以任何方式自动重新分配数据。

原文由 blockR 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于任何想要更新 Kafka 版本的解决方案的人。请遵循此方法。

Kafka 的整个数据保留和传输策略取决于分区,因此请注意增加分区的影响。 (Kafka 的较新版本会显示有关此的警告)尽量避免一个代理有太多领导分区的配置。

有一个简单的 3 阶段方法。

第一步:增加主题分区

./bin/kafka-topics.sh --bootstrap-server localhost:9092 --alter --topic testKafka_5 --partitions 6

第 2 步:为给定主题创建分区 json 文件

{ “版本”:1,“分区”:[ {“主题”:“testKafka_5”,“分区”:0,“副本”:[0,1,2]},{“主题”:“testKafka_5”,” partition”:1,“replicas”:[2,1,0]}, {“topic”:“testKafka_5”,“partition”:2,“replicas”:[1,2,0]}, {“topic” :“testKafka_5”,“分区”:3,“副本”:[0,1,2]},{“主题”:“testKafka_5”,“分区”:4,“副本”:[2,1,0] }, {“topic”:“testKafka_5”,“partition”:5,“replicas”:[1,2,0]} ]}

使用较新的分区和副本创建文件。最好将副本扩展到不同的代理,但它们应该存在于同一个集群中。考虑远程副本的延迟。将给定文件传输到您的 Kafka。

第 3 步:重新分配分区并验证

./bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9092 --reassignment-json-file bin/increase-replication-factor.json  --execute

./bin/kafka-reassign-partitions.sh --bootstrap-server localhost:9092 --reassignment-json-file bin/increase-replication-factor.json --verify

您可以使用 –describe 命令检查更改的效果。

原文由 c0der512 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题