我想知道什么是一个好的方法来配置分区的数量相对于最大数量的水平扩展的示例。
假设我有一个有6个分区的主题。
我有一个应用程序使用 ConcurrentKafkaListenerContainerFactory
与 setConcurrency
第6页。那就意味着我有6个 KafkaMessageListenerContainer
每一个都使用一个线程,并且消耗来自所有分区的消息。
如果以上是正确的,那么我想知道如果我通过添加另一个示例水平扩展应用程序会发生什么?如果新示例具有相同的并发配置6,当然还有相同的使用者组,我相信第二个示例不会使用任何消息。因为不会发生重新平衡,因为每个现有的使用者将有一个分配给它的分区。
但是如果我们回到第一个例子,有6个分区,其中一个示例的并发性为3,那么每个使用者线程呢/ KafkaMessageListenerContainer
将分配2个分区。如果我们扩展这个应用程序(相同的用户组id和3的并发性),我相信会发生一个重新平衡,两个示例将分别使用3个分区。
这些假设正确吗?如果不正确,你应该如何处理这种情况?
1条答案
按热度按时间dsekswqp1#
通常,您的假设对于默认行为是正确的,默认行为基于:
但是你可以插入任何
ConsumerPartitionAssignor
通过partition.assignment.strategy
消费者财产:https://kafka.apache.org/documentation/#consumerconfigs_partition.assignment.strategy另请参见
ConsumerPartitionAssignor
javadocs获取更多信息及其实现,以便为您的用例做出选择。