脚本:
正在从名为“test”的分区运行spring引导项目,该分区有10个分区。分区分配发生在13:00:00
在~13:00:30向主题添加分区时使用: ./kafka-topics.sh --alter --zookeeper zookeeper:2181 --topic test --partitions 100
13:05:30触发分区重新分配。
我运行了几次这些步骤,看起来重新分配每~5分钟发生一次。
有没有办法改变重新分配检查的工作频率?
我们希望每隔几秒钟。这个手术很重吗?这就是每5分钟发生一次的原因吗?或者是可以忽略不计?
编辑:
我的用例如下:我们有引导微服务的集成测试。当主题的使用者首先引导时,如果主题不存在并且它创建的分区数等于配置的分区数,则它会创建该主题 concurrency
(例如10)。然后这个主题的制作人和他的同事 partitonCount
(例如,20)大于创建的分区数,因此spring cloud stream添加缺少的分区,同时消费者分配的分区没有改变,并且它从前10个分区(1-10)开始一直使用。问题是,生产者将消息发布到所有20个分区,因此在为使用者分配新分区之前,不会使用发送到最后10个分区(11-20)的消息。
这种行为会给我们的测试带来问题,我们不能等待5分钟,直到所有分区都分配给使用者。另外,我们不希望预先创建包含所需分区数的主题,我们希望它仍然由springcloudstream处理。
编辑2:
看来,控制“重新分配”的相关财产是 metadata.max.age.ms
.
以毫秒为单位的一段时间,在这段时间之后,我们强制刷新元数据,即使我们没有看到任何分区领导层更改,也可以主动发现任何新的代理或分区。
1条答案
按热度按时间deyfvvtc1#
所以这里有几个问题。
首先,“spring cloud stream”和/或“spring kafka”没有进行任何类型的重新平衡、分区重新分配等。这些都是在kafka内部完成的。在kafka中有一个客户端属性,默认值为5分钟(我相信),如果消费者在那么长的时间内没有投票,就认为它死了等等。在任何情况下,我都会让您访问apache kafka频道,以获取关于kafka内部的更多信息。
另外,添加分区、重新分配和重新平衡是代价高昂的操作,不应在没有认真考虑其影响的情况下尝试。所以,我很想知道您不断添加分区的用例是什么?