当前位置: 首页 > news >正文

详细介绍:kafka如何保证消息不被重复消费

首先kafka事务没办法做到这一点,事务只能保证以下几点:

producer发送多条消息,要么同时成功,要么同时失败;在没有提交事务之前,消息对消费者不可见,事务失败需要程序员自己调用kafka的 abort 回滚,kafka不会自己处理回滚,失败的情况下,这些已经发送的消息会被kafka标记为无效,消费者看不到

** 多说一句,kafka事务是分布式事务,比如 producer 发送多条事务,任意一条事务可能发送到 broker1 或者 broker2 ...

对于 消费消息 -> 重新发送kafka -> 提交offset 这个业务场景来说,kafka 事务能保证在程序出现异常的情况下,重新发送到 kafka 的消息无效,也就是消费者看不到这些消息,然后 offset 提交失败,也就是说消费者还是需要从上一次的offset继续消费消息

所以如何保证消费者不重复消费消息?

这个需要程序员自己去实现

比如发送消息的时候,可以为消息添加一条唯一 id,随后消费消息的时候,把该id写入到数据库,每次消费消息先从数据库查询看有没有这个id,有的话就是已经消费过了,否则就是第一次消费

通过再者, 必须手动提交offset,而且提交的间隔不宜过长,比如能够设置每消费10条消息就提交offset,这样即使消费失败,最多也就需要判断10条消息的id,防止消息过多,判断这么多消息是否被消费过也是一种性能浪费

http://www.zskr.cn/news/7993.html

相关文章:

  • C++ 最开始的地方
  • ClkLog埋点与用户行为分析系统:架构升级与性能全面提升
  • ARC187 做题记
  • lombok与mapstruct冲突的问题
  • SAP物料自动记账科目设置总结
  • NVR设备ONVIF接入平台EasyCVR视频融合平台智慧小区视频监控一站式建设方案
  • 移远模组使用移远云平台对接指令
  • 2025年最火的免费客服系统分享
  • MCP服务自用
  • Nexpose 8.21.0 for Linux Windows - 漏洞扫描
  • 天上的乌云不见了,但是没有下雨,那它们都去哪了呢?
  • afx100.dll afrvidwindowmanager.dll afresu.dll afrcomputeserver.dll afckernel.dll aexplore_view. - 详解
  • UE5 增量 Cook
  • 【数据库强大的系统Trip 第1站】总概
  • RenderPass与 SubPass 理论
  • 详细介绍:html让该元素忽略所有鼠标事件,例如点击、悬停、拖拽都无效。
  • 梗棋
  • javax.imageio.IIOException: Cant create output stream! 解决方法 验证码出不来
  • 【转载】在Vue3中引用Vue2组件
  • Windows Server 2016 中文版、英文版下载 (2025 年 9 月更新)
  • 美联储降息 25 个基点,这事儿跟我们有多大关系?
  • Windows Server 2022 中文版、英文版下载 (2025 年 9 月更新)
  • k8s系列--前世今生
  • excel文本改为数据格式
  • 面向对象初步接触-学生信息管理系统
  • Numpy高维数组的索引()
  • Machine Learning
  • 详细介绍:jQuery 操作指南:从 DOM 操作到 AJAX
  • Word 常用快捷键大全:提升文档处理效率的必备技巧​ - 教程
  • ArcGIS:如何设置地图文档的相对路径或者发布为地图包 - 实践