【发布时间】:2017-06-24 14:28:44
【问题描述】:
传递的消息数量不多,但需要对实体上的消息进行严格的排序。例如,我们可能有一百万条消息,但有 20 万个实体。如果实体的消息失败,则不应使用后续消息,但可以使用其他实体的消息。
使用 Kafka,我们可以对分区进行排序,其限制是如果分区中的消息没有被消费,那么所有后续消息都将被阻止,即使它们属于另一个实体。我们可以增加分区的数量,但这有一个限制。
解决这类问题的通用模式是什么?
【问题讨论】:
-
如果您想跳过一条消息,您仍然可以“使用”并忽略它——以供以后处理。如果你改变你的决定,你可以记住消息偏移量,然后
#seek()到这个偏移量,以便以后处理消息。 -
正如@MatthiasJ.Sax 所说——您实际上可以在需要时跳过有问题的消息。因此,“所有后续消息都将被阻止”是错误的假设。也许您需要用更多细节来更新您的问题,例如您在下面的评论中添加的内容?
-
抱歉没有提供足够的信息。因为如果我将消息放在一边,实体需要排序,因此这些实体的后续消息也需要放在一边。正如@ossu54 建议的那样,我可以跟踪有问题的实体,并且每次我消费一条消息时,我都可以检查这个列表并决定是否处理。在对 ossu54 的回答的评论中看到我对此的担忧它是否澄清了 miguno 和 Matthias J. Sax
标签: architecture apache-kafka message-queue