记Mysql ES 数据一致性问题及方案

业务中使用了mysql和ElasticSearch。Mysql作为主仓库,ES作为索引,实际上包含了接近全集的数据。

问题:

Mysql和Es未做事务,出现了并非场景下:

A线程从MySql读,写到ES

B线程从mysql、ES删除

结果是最终ES中出现了A线程写入的数据,出现了数据不一致的问题。

解决方案:

1。 对数据加锁,但是此场景为分布式场景,需要使用redis锁,需要考虑性能开销和公平队列问题。锁的粒度要从写线程的读开始。

2。最终一致性:发生改变时,通过消息队列发送此次改变,消费时验证数据是否一直,不一致则修改到一致,消费成功。如果消费时再发送改变,在下次消息消费中再次验证。

3。解析mysql binlog,直接同步到es,可以在中间使用消息队列削峰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值