我正在尝试使用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。
答案 0 :(得分:1)
您可能的groupId = "t1, t2, t3, t4, t5, t6, t7, t8, t9, t10"
解决方案在逻辑上是错误的。您仍然具有相同的侦听器方法,那么对于卡夫卡主题中的同一条记录如此多次调用它有什么意义呢?
如果您将使用不同的@KafkaListener
方法签名,那么我将就它们上的不同组达成一致,因此,每个签名实际上都会收到相同的消息,并且也可以并行完成,因为每个{ {1}}炸毁了自己的监听器容器过程。
另一方面,您可以利用Spring的@KafkaListener
抽象来将单个记录从单个@EventListener
分发给该事件的任何可能的订阅者。在这种情况下,您无需考虑不同的组:单个组足以满足Kafka的需求,并且已经处理了目标应用程序中已存在的所有内容。