消息队列+更新DB极易引发的DB并发修改bug

背景

我们在生产系统中和其他系统进行交互时一般都会通过消息队列来解耦生产者和消费者,然后通过每个使用方消费消息队列的消息的方式来完成消息的消费,并且一般来说我们消费消息后极有可能会操作DB,不过这种方式如果处理不够仔细,很容易发生DB并发更新导致的数据覆盖

问题复现

解决方案:

1.对于DB的同一条记录的操作需要有先后顺序,这就要求对于同一个mid的消息消费要串行,而不能并行,所以这就要求生产者发送消息到消息队列时需要按照mid进行partition分区,这样同一个mid只会在一个分区中,而kafka的消息消费是分区有序的,这个问题就可以解决掉了

2.对于DB的并发更新使用加乐观锁(版本号)或者悲观锁的方式来达到串行更新DB记录的效果

相关推荐
程序猿乐锅6 小时前
【 苍穹外卖day03 | 菜品管理 】
java·开发语言·数据库·mysql
闪电悠米6 小时前
黑马点评-Redis ZSet-实现关注 Feed 流
服务器·网络·数据库·redis·缓存·junit·lua
天疆说6 小时前
在 Ubuntu 24.04 上安装 MATLAB R2021b
数据库·ubuntu·matlab
码云数智-大飞6 小时前
Go Channel 详解:并发通信的正确姿势
前端·数据库·git
Volunteer Technology7 小时前
Flink Table API与SQL(二)
大数据·数据库·flink
杨云龙UP7 小时前
Spotlight 接入 Oracle 数据库监控操作指南 2026-06-16
数据库·oracle·性能监控·预警·阈值·spotlight·瓶颈分析
正在走向自律7 小时前
KingbaseES MySQL模式深度解析,从语法兼容到迁移的全栈指南
数据库·数据库架构·kingbasees·电科金仓
叫我:松哥7 小时前
基于Python flask的中学可控智能命题系统设计与实现,整合遗传算法、DeepSeek 大模型及数据库技术构建一体化应用
数据库·人工智能·python·算法·机器学习·flask·遗传算法
阿维的博客日记7 小时前
Hippo4j 线程池监控接入方法
数据库·hippo4j
审判长烧鸡7 小时前
数据库字段命名规范速查表
数据库·sql