多个 Spring Kafka Consumer 一个 class 多个组

multiple Spring Kafka Consumer one class multiple groups

我正在试验 Apache Kafka 和 Spring Boot。

有没有办法在一个 JVM 中设置多个侦听器,每个侦听器都关联到一个主题的不同组(以便它们各自响应一个事件)?

有好的模式吗?

@KafkaListener(topics ="${slappy.consumer.topic}", groupId = "t1, t2, t3, t4, t5, t6, t7, t8, t9, t10")
public void listenToGroup(@Payload WackyMessage message) {

    log.info("Wacky Consumer with processItemId of received message: '{}'", message);

    process(message, ProcessItemIdentifiers.omni_silo0_deleter);
}

听起来这就是 Akka 的用途。我希望我可以裸体 spring。我不确定此时是否要将 Akka 添加到组合中。

您可能的 groupId = "t1, t2, t3, t4, t5, t6, t7, t8, t9, t10" 解决方案在逻辑上是错误的。你仍然有相同的侦听器方法,那么在 Kafka 主题中为同一条记录调用这么多次有什么意义?

如果你有不同的 @KafkaListener 方法签名,我会同意你关于他们的不同组的看法,所以他们每个人都会真正收到相同的消息并且它也可以并行完成,因为每个 @KafkaListener 炸毁自己的 listener 容器 进程。

另一方面,您可以利用 Spring 的 @EventListener 抽象将来自单个 @KafkaListener 的单个记录分发给该事件的任意数量的订阅者。在这种情况下,您不需要考虑不同的组:单个组就足以从 Kafka 消费并处理目标应用程序中的所有内容。