我是Kafka的新手,我正在寻求有关如何使用Kafka的指南,以实现以下消息模式:
首先,我希望消息是异步,并且还需要“已消耗” ,即单个消费者应使用该消息,而其他消费者将无法使用以后再食用。
这种消息模式的一个用例是,当您有多个“交付服务”实例并且您只希望这些实例中的一个消耗该消息时(假定一个实例由于某种原因不能利用幂等性。)
有人可以建议如何配置Kafka Consumer以实现上述目标吗?
答案 0 :(得分:1)
我认为您实质上是在寻求将Kafka用作传统的消息队列(例如Rabbit MQ),该消息队列在使用后会被删除。对此有很多争论。通常情况下,围栏的两侧都有优点和缺点。
this post上的答案或多或少与这个想法...
但是...
This article讨论一种有关如何尝试使其工作的方法。消息不会真正删除,但是方法非常相似。这是一篇相当全面的文章,涵盖了您可以探索以使其更高效的开销和优化。
我希望这会有所帮助!
答案 1 :(得分:1)
一个伟大的问题,这是我们在部署和使用Kafka时遇到的许多难题。实际上,在很多情况下,我正在从事的项目尝试将Kafka用于您描述的用例,但收效甚微。
简而言之,在处理消息传递时会遇到一些消息交换模式:
Kafka并没有深入探讨其原因,实际上只是为发布/订阅创建的。还有其他产品可以单独实现其他功能,而实际上可以同时实现这三个功能。
所以我要问的一个问题是,您是否愿意在该项目中使用Kafka以外的其他东西?
答案 2 :(得分:1)
您可以使用spring kafka来做到这一点。 Spring Kafka负责许多配置和样板代码。在https://www.baeldung.com/spring-kafka处查看示例。这应该让您开始。
此外,您可能需要阅读Kafka的实际工作方式。您在Kafka中发布到主题的消息是本地异步的。生产者不必担心谁会消费它,也不必担心消息一旦发布就会发生什么。
然后,送货服务中的消费者应订阅主题。如果您希望传递服务仅使用一次消息,那么传递服务的使用者应该在同一组中(相同的组ID)。 Kafka会确保由一个消费者(在同一组中)消费的消息不会对其他消费者可用。
默认邮件保留期为7天,可以在Kafka中配置。