Java Kafka中主队列和优先级队列的数据排序

Java Kafka中主队列和优先级队列的数据排序,java,apache-kafka,kafka-consumer-api,apache-kafka-connect,Java,Apache Kafka,Kafka Consumer Api,Apache Kafka Connect,我需要按顺序处理产品id,并计划为此使用kafka,现在,如果kafka或我的代码丢失数据,我将在5月份的数据库中保存所有这些产品id,因此,如果在给定的时间内未处理记录,比如说24小时,我需要在队列中重新发布它们,但以优先级方式,因为kafka对队列中的数据没有优先级概念,我可以使用另一个队列作为优先级队列 我面临的问题是,我还需要在优先队列中订购产品。所以,如果我已经基于散列分布在分区中,并且我的消费者再次按顺序处理消息,即,维护消费者中每个线程的队列,并基于产品id的散列,我可以在这些内存

我需要按顺序处理产品id,并计划为此使用kafka,现在,如果kafka或我的代码丢失数据,我将在5月份的数据库中保存所有这些产品id,因此,如果在给定的时间内未处理记录,比如说24小时,我需要在队列中重新发布它们,但以优先级方式,因为kafka对队列中的数据没有优先级概念,我可以使用另一个队列作为优先级队列

我面临的问题是,我还需要在优先队列中订购产品。所以,如果我已经基于散列分布在分区中,并且我的消费者再次按顺序处理消息,即,维护消费者中每个线程的队列,并基于产品id的散列,我可以在这些内存队列中主要分布数据。但在2个队列的情况下,1个作为主队列,1个优先级I在这些队列中排序。因此,来自这两个队列的数据应该传递给同一个使用者,这样我就可以在代码中保持顺序


请建议我是否走错了方向,或者我应该如何继续。

如果需要,可以这样做。如果您有合理的保留策略和复制系数,您将不会丢失kafka中的数据


还有怎么做:

1.设置:

您可以有两个主题。让我们称之为正常和优先。两个分区的数量相同,让我们有4个。您在这两者上都有相同的分区策略,比如说产品id mod 4

2.制作人:

现在您有了id为3的产品的活动。它被发送到普通主题分区3。你不会因为任何原因收到它。您现在使用相同的逻辑重新发布优先级主题中关于相同产品的事件,使其进入相同的分区

3.消费者:

在使用者端,您必须手动分配给特定分区。假设你有两个消费者。您只需为这两个主题分配第一个分区0和1(并侦听这两个主题)。第二个分区分配给剩余的分区2和分区3


我希望这能回答你的问题。祝你好运

如果需要,可以这样做。如果您有合理的保留策略和复制系数,您将不会丢失kafka中的数据


还有怎么做:

1.设置:

您可以有两个主题。让我们称之为正常和优先。两个分区的数量相同,让我们有4个。您在这两者上都有相同的分区策略,比如说产品id mod 4

2.制作人:

现在您有了id为3的产品的活动。它被发送到普通主题分区3。你不会因为任何原因收到它。您现在使用相同的逻辑重新发布优先级主题中关于相同产品的事件,使其进入相同的分区

3.消费者:

在使用者端,您必须手动分配给特定分区。假设你有两个消费者。您只需为这两个主题分配第一个分区0和1(并侦听这两个主题)。第二个分区分配给剩余的分区2和分区3


我希望这能回答你的问题。祝你好运

我这里有一个额外的要求。当优先级消息到达时,该组中的所有其他使用者应等待该优先级消息被处理。有可能让消费者互相交谈吗?我的调查显示不是这样的,这是可以做到的。即使在stackoverflow上,也有很多关于“卡夫卡暂停消费者”查询的答案。暂停在使用者API上公开,您也可以停止使用者并重新启动它,或者继续使用相同的暂停,但不处理和重置偏移量。只要你在一个应用程序中拥有所有卡夫卡消费者,这就行了。如果没有,您需要外部沟通渠道。谢谢。在分析了利弊之后,我得出结论,这是不必要的,也不值得付出努力。因为这实际上是将一个异步系统转换为同步系统。当优先级消息到达时,该组中的所有其他使用者应等待该优先级消息被处理。有可能让消费者互相交谈吗?我的调查显示不是这样的,这是可以做到的。即使在stackoverflow上,也有很多关于“卡夫卡暂停消费者”查询的答案。暂停在使用者API上公开,您也可以停止使用者并重新启动它,或者继续使用相同的暂停,但不处理和重置偏移量。只要你在一个应用程序中拥有所有卡夫卡消费者,这就行了。如果没有,您需要外部沟通渠道。谢谢。在分析了利弊之后,我得出结论,这是不必要的,也不值得付出努力。因为这实际上是将异步系统转换为同步系统。