Apache kafka 使用卡夫卡消费者,使消息仅被一次语义使用

Apache kafka 使用卡夫卡消费者,使消息仅被一次语义使用,apache-kafka,kafka-consumer-api,Apache Kafka,Kafka Consumer Api,我是卡夫卡新手,我正在寻求如何使用卡夫卡的指导,以实现以下消息模式: 首先,我希望消息是异步的,而且它需要“消费”,即单个消费者应该消费它,而其他消费者此后将无法消费它 此消息模式的一个用例是,当您有一个“传递服务”的多个实例,并且您只希望这些实例中的一个使用该消息时(假设由于某种原因不能利用幂等性) 是否有人可以建议如何配置Kafka消费程序以实现上述功能?我认为您基本上希望将Kafka用作传统的消息队列(例如,Rabbit MQ),其中消息在消费后被删除。关于这一点,有很多争论。正如往常一样

我是卡夫卡新手,我正在寻求如何使用卡夫卡的指导,以实现以下消息模式:

首先,我希望消息是异步的,而且它需要“消费”,即单个消费者应该消费它,而其他消费者此后将无法消费它

此消息模式的一个用例是,当您有一个“传递服务”的多个实例,并且您只希望这些实例中的一个使用该消息时(假设由于某种原因不能利用幂等性)


是否有人可以建议如何配置Kafka消费程序以实现上述功能?

我认为您基本上希望将Kafka用作传统的消息队列(例如,Rabbit MQ),其中消息在消费后被删除。关于这一点,有很多争论。正如往常一样,双方都有优点和缺点

上面的答案或多或少与这个想法相反

然而

讨论一种方法,说明如何尝试并使其发挥作用。这些消息实际上不会被删除,但方法非常相似。这是一篇相当全面的文章,涵盖了开销和优化,您可以探索使其更有效


我希望这有帮助

我认为您实际上是想将Kafka用作一个传统的消息队列(例如Rabbit MQ),消息中的内容在使用后会被删除。关于这一点,有很多争论。正如往常一样,双方都有优点和缺点

上面的答案或多或少与这个想法相反

然而

讨论一种方法,说明如何尝试并使其发挥作用。这些消息实际上不会被删除,但方法非常相似。这是一篇相当全面的文章,涵盖了开销和优化,您可以探索使其更有效


我希望这有帮助

这是一个很好的问题,我们很多人在部署和使用卡夫卡时都会遇到这个问题。事实上,有很多次,我正在从事的一个项目试图将Kafka用于您描述的用例,但收效甚微

简而言之,在处理消息时,您会遇到几种消息交换模式:

  • 请求->答复
  • 发布/订阅
  • 排队(这是您正在尝试做的事情)
  • 没有深入探究原因,卡夫卡实际上只是为了发布/订阅而构建的。还有其他一些产品分别实现了其他功能,还有一个产品实际上实现了这三个功能


    所以我有一个问题要问你,你愿意在这个项目中使用卡夫卡以外的东西吗?

    这是一个很好的问题,我们很多人在部署和使用卡夫卡时都会遇到这个问题。事实上,有很多次,我正在从事的一个项目试图将Kafka用于您描述的用例,但收效甚微

    简而言之,在处理消息时,您会遇到几种消息交换模式:

  • 请求->答复
  • 发布/订阅
  • 排队(这是您正在尝试做的事情)
  • 没有深入探究原因,卡夫卡实际上只是为了发布/订阅而构建的。还有其他一些产品分别实现了其他功能,还有一个产品实际上实现了这三个功能


    所以我有一个问题要问你,你愿意在这个项目中使用卡夫卡以外的东西吗?

    你可以使用spring卡夫卡来实现这一点。Spring Kafka负责许多配置和锅炉板代码。检查这里的示例。这应该是你的开始

    此外,您可能需要阅读卡夫卡的实际工作原理。在Kafka中发布到主题的消息本机是异步的。您的制作人不必担心谁使用了它,也不必担心消息一旦发布会发生什么

    然后,交付服务中的消费者应该订阅这些主题。如果希望传递服务只使用一次邮件,则传递服务的使用者应位于同一组(相同的组id)中。卡夫卡负责确保其中一个消费者(在同一组中)所消费的信息不会提供给其他消费者


    默认消息保留期为七天,可在Kafka中配置。

    您可以使用spring Kafka来执行此操作。Spring Kafka负责许多配置和锅炉板代码。检查这里的示例。这应该是你的开始

    此外,您可能需要阅读卡夫卡的实际工作原理。在Kafka中发布到主题的消息本机是异步的。您的制作人不必担心谁使用了它,也不必担心消息一旦发布会发生什么

    然后,交付服务中的消费者应该订阅这些主题。如果希望传递服务只使用一次邮件,则传递服务的使用者应位于同一组(相同的组id)中。卡夫卡负责确保其中一个消费者(在同一组中)所消费的信息不会提供给其他消费者


    默认消息保留期为七天,在卡夫卡中可配置。

    我找到了一个相关链接:欢迎提供任何其他相关信息。我想您误解了卡夫卡中“仅一次”的含义,但消息在阅读后不会从主题中删除。消费者不会通知代理他们已经读取了数据,只会提交消费者组的偏移量非常感谢您的输入@cricket_007我将再次介绍这些概念。你的评论很有意思。在一个完美的世界中,消费者群体从来不会多次读取消息,但网络/应用程序故障会导致偏移量不被删除