通过 Kafka 消费者重试维持订单保证

问题描述 投票:0回答:3

我正在为基于 Kafka 的数据处理管道中的消费者重试设计一个架构。我们正在使用 Kafka 生产者和消费者,并正在考虑重试主题,如果消费出错,将在这些主题上发送消息。将会有消费者以一定的节奏运行这些重试主题。

我读了很多参考架构,但没有一个讨论如何在消息消费失败期间维护排序保证。我举个例子:

我们的 Kafka 消息包含具有对象和操作类型(可以是 CREATE/UPDATE/DELETE)的有效负载。我们对

object_id
上的消息进行分区,以确保该对象上的操作是有序的。但是,如果消息在消费时失败,您是否应该自动将后续消息标记为失败,甚至不尝试处理它们?你如何维持这种状态?

是否有任何参考架构可以解决这个问题?

apache-kafka kafka-consumer-api
3个回答
5
投票

我建议使用缓存来协调这一点 - 每当消息要重试时,就增加 object_id 键。同样,每当从重试主题成功消费一条消息时,就递减键。

现在,在尝试消费消息之前,只需检查是否存在与object_id对应的值>0的key,如果存在,则直接发送重试。


1
投票
分布式键值缓存,

其中键为object_id,值为重试主题的级别。

在消息消耗时对照此缓存进行检查,如果 

object_id

存在,则将事件直接发送到主题。

    


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.