如果我们有>一个主题的一个分区,然后我们可以有一个消费者组,现在这个组中的不同的消费者将拆分他们想要读取的分区。
我们还有一个选择,在这里我们不使用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.");