我正在使用spring Boot 构建一个Kafka消费者,但我有多个主题来消费数据。但是我不想为每个主题创建一个Sping Boot 应用程序来避免维护开销,所以如果我让这个应用程序消耗来自多个主题的数据,并且如果这些主题的消费者数量多于分区(因为每个主题的分区可能不一样),那么它会在我的应用程序中引起任何问题吗?比如频繁的再平衡?
由于我尚未执行,你对应遵循的方法有何建议?
我正在使用spring Boot 构建一个Kafka消费者,但我有多个主题来消费数据。但是我不想为每个主题创建一个Sping Boot 应用程序来避免维护开销,所以如果我让这个应用程序消耗来自多个主题的数据,并且如果这些主题的消费者数量多于分区(因为每个主题的分区可能不一样),那么它会在我的应用程序中引起任何问题吗?比如频繁的再平衡?
由于我尚未执行,你对应遵循的方法有何建议?
1条答案
按热度按时间yruzcnhs1#
如果你在某些主题上的分区比消费者少,那么一些消费者就不会被分配到这些主题的分区,这是没有问题的。
但是,默认的分区分布可能不是您想要的。
参见https://docs.spring.io/spring-kafka/docs/current/reference/html/#using-ConcurrentMessageListenerContainer
当监听多个主题时,默认的分区分布可能不是您所期望的。例如,如果您有三个主题,每个主题有五个分区,并且您想使用
concurrency=15
,那么您只会看到五个活动的消费者,每个消费者都被分配了一个来自每个主题的分区,而其他10个消费者都是空闲的。这是因为默认的KafkaPartitionAssignor
是RangeAssignor
(参见其Javadoc)。对于这种情况,您可能需要考虑使用RoundRobinAssignor
来代替...