多个Spring Kafka Consumer一类多个组

时间:2019-08-21 17:12:42

标签: spring-boot spring-kafka

我正在尝试使用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的目的。我希望我能做赤裸裸的春天。我不确定现在是否要添加Akka。

1 个答案:

答案 0 :(得分:1)

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

如果您将使用不同的@KafkaListener方法签名,那么我将就它们上的不同组达成一致,因此,每个签名实际上都会收到相同的消息,并且也可以并行完成,因为每个{ {1}}炸毁了自己的监听器容器过程。

另一方面,您可以利用Spring的@KafkaListener抽象来将单个记录从单个@EventListener分发给该事件的任何可能的订阅者。在这种情况下,您无需考虑不同的组:单个组足以满足Kafka的需求,并且已经处理了目标应用程序中已存在的所有内容。