为了在 kafka 侦听器中实现并发,使用 groupId 和并发性定义消费者组有何不同@KafkaListener?



如果我们有>一个主题的一个分区,然后我们可以有一个消费者组,现在这个组中的不同的消费者将拆分他们想要读取的分区。

我们还有一个选择,在这里我们不使用consumer group,但定义了concurrency = 2(例如),现在两个consumer实例从不同的分区运行每个读取。

这两个有什么不同?或者它们在引擎盖下是一样的?

是的,我们可以将@KafkaListener的并发选项视为消费者组成员的数量。从Kafka的角度来看,如果我们只是启动应用程序的另一个实例,它确实是相同的。

只有在手工分配时才不使用消费者组。否则,将@KafkaListener自动生成的id作为groupId使用。否则抛出异常:

Assert.state(hasGroupIdConsumerConfig || StringUtils.hasText(this.containerProperties.getGroupId()),
"No group.id found in consumer config, container properties, or @KafkaListener annotation; "
+ "a group.id is required when group management is used.");

最新更新