|NO.Z.00081|——————————|BigDataEnd|——|Hadoop&kafka.V66|——|kafka.v66|消息重复场景|解决方案.v02|
一、消费者数据重复场景及解决方案
### --- 根本原因
~~~ 数据消费完没有及时提交offset到broker。
### --- 场景
~~~ 消息消费端在消费过程中挂掉没有及时提交offset到broke,
~~~ 另一个消费端启动拿之前记录的offset开始消费,
~~~ 由于offset的滞后性可能会导致新启动的客户端有少量重复消费。
二、解决方案
### --- 取消自动提交
~~~ 每次消费完或者程序退出时手动提交。这可能也没法保证一条重复。
### --- 下游做幂等
~~~ 一般是让下游做幂等或者尽量每消费一条消息都记录offset,
~~~ 对于少数严格的场景可能需要把offset或唯一ID(例如订单ID)和下游状态
~~~ 更新放在同一个数据库里面做事务来保证精确的一次
~~~ 更新或者在下游数据表里面同时记录消费offset,
~~~ 然后更新下游数据的时候用消费位移做乐观锁拒绝旧位移的数据更新。
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv013-kafka
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通