在这里,我们有一项服务,可在Kafka上生成优先票证,而第二项服务是人工服务员将这些票证用于呼叫客户。门票每天产生。问题在于,有些客户可能会在几天之内被赶到Kafka,而我们不想再给客户打电话两次。
当前,我们正在考虑保留一个表来存储已处理的客户,并在出现重复的情况下跳过它们。另一个选择是Kafka自动跳过这些重复项。因此,问题是如果给定身份密钥,是否有办法告诉卡夫卡避免重复处理已经处理过的消息?
答案 0 :(得分:2)
重复的消息应始终由消息使用者处理。没有任何技术可以完全防止重复并保证交付。 (正如cricket_007在他们的评论中指出的那样,这不是Kafka的功能,鉴于此,责任必须落在下游)
每条消息至少应具有唯一的标识符,以便消费者能够确定它是否曾经看过。常见的解决方案是在用户端使用一个表来按其唯一ID跟踪已处理的消息。