apache-kafka - 通过 Kafka 消费者重试维护订购保证

标签 apache-kafka kafka-consumer-api

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

我阅读了很多引用架构,但没有一个提到如何在消息消费失败时保持顺序保证。让我举个例子:

我们的 Kafka 消息包含具有对象和操作类型(可以是 CREATE/UPDATE/DELETE)的有效负载。我们根据 object_id 对消息进行分区,以确保对该对象的操作是有序的。但是,如果消息消费失败,您是否应该自动将具有相同 object_id 的后续消息标记为失败,甚至不尝试处理它们?你如何保持这种状态?

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

最佳答案

是的,您需要有一种机制,如果一条具有相同 object_id 的消息失败并进行重试,那么所有具有相同 object_id 的后续消息也将直接进行重试。

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

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

关于apache-kafka - 通过 Kafka 消费者重试维护订购保证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51491659/

相关文章:

java - Kafka 消费者需要很长的轮询持续时间

apache-kafka - 由于消费者速度慢,Kafka 重新平衡主题中的数据

apache-kafka - Kafka 如何在代理之间分配主题分区

error-handling - 使用 Kafka 的 Streams API 处理不良消息

apache-kafka - 使用单个 kafka 流从多个主题消费

apache-spark - 无法在 Spark 结构化流中转换 Kafka Json 数据

java - Apache 卡夫卡 (KStreams) : How to subscribe to multiple topics?

apache-kafka - 如何在 Kafka 中设置不从它离开的地方消费?

apache-kafka - 动物园管理员和卡夫卡的领导人选举

c++ - 如何解决 librdkafka 中的 RdKafka::ERR__TIMED_OUT 和 RdKafka::ERR__MSG_TIMED_OUT?