首页 > 解决方案 > 避免 Kafka 上的非顺序重复消息

问题描述

在这里,我们有一个服务可以在 Kafka 上生成优先票证,第二个服务是人工操作员使用这些票证给客户打电话。门票每天生成。问题是一些客户可能会在几天内被推送到 Kafka,我们不想给客户打电话两次。

目前,我们正在考虑保留一张表来存储已处理的客户,并在重复的情况下跳过它们。另一种选择是 Kafka 自动跳过这些重复项。那么,问题是是否有办法告诉 Kafka 在给定身份密钥的情况下避免重复已处理的消息?

标签: architectureapache-kafka

解决方案


重复消息应始终由消息使用者处理。没有技术可以完全防止重复,也可以保证交付。(正如 cricket_007 在他们的评论中指出的那样,这不是 Kafka 的特性,鉴于此,责任必须落在下游更远的地方)

至少,每条消息都应该有一个唯一的标识符,以便消费者能够确定它以前是否看过它。在消费者端有一个表,通过它们的唯一 ID 跟踪已处理的消息是一种常见的解决方案。


推荐阅读