architecture - 避免 Kafka 上的非顺序重复消息
问题描述
在这里,我们有一个服务可以在 Kafka 上生成优先票证,第二个服务是人工操作员使用这些票证给客户打电话。门票每天生成。问题是一些客户可能会在几天内被推送到 Kafka,我们不想给客户打电话两次。
目前,我们正在考虑保留一张表来存储已处理的客户,并在重复的情况下跳过它们。另一种选择是 Kafka 自动跳过这些重复项。那么,问题是是否有办法告诉 Kafka 在给定身份密钥的情况下避免重复已处理的消息?
解决方案
重复消息应始终由消息使用者处理。没有技术可以完全防止重复,也可以保证交付。(正如 cricket_007 在他们的评论中指出的那样,这不是 Kafka 的特性,鉴于此,责任必须落在下游更远的地方)
至少,每条消息都应该有一个唯一的标识符,以便消费者能够确定它以前是否看过它。在消费者端有一个表,通过它们的唯一 ID 跟踪已处理的消息是一种常见的解决方案。
推荐阅读
- python - 我的运行时估计对于 Python 中的这个算法是否正确?
- java - 作为ConstraintLayout一部分的xml文件中的android:orientation属性是什么意思
- c# - 列出用户在 Azure 存储中可以访问的容器
- javascript - JS 事件帮助 - 更改样式属性时
- c++ - 使用 ifstream 和 stringstream 多次运行函数
- delphi - Windows 样式主题在拖动时使窗口卡顿
- elasticsearch - Ansible 剧本出错了
- android - 如何将android库包含到cordova插件中
- java - 使用Jackson在java中序列化数组数组
- c# - Azure 事件中心:QuotaExceededException:4999 个句柄限制