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

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

问题:

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

A线程从MySql读,写到ES

B线程从mysql、ES删除

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

解决方案:

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

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

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

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在保证MySQL和Elasticsearch数据一致性方面,可以采取以下方案。首先,可以使用Elasticsearch的API来检测数据是否同步完成。可以通过查询Elasticsearch中的数据量来判断是否一致,可以使用GET请求来获取Elasticsearch中的数据量,例如使用GET robin_logs/robin_logs/_count来获取数据量。\[1\]此外,还可以进行抽样对比详细数据,以确保数据一致性。另外,还可以借鉴其他小伙伴遇到的问题方案,例如MysqlES数据一致性问题方案,可以参考他们的解决方案来保证数据一致性。\[2\]还有一种方案是使用kafka、maxwell、logstash、elasticsearch等工具来实现数据同步。这套方案可以通过修改配置文件和启动命令来快速上线,而且成本较低,可以大规模使用。\[3\]通过以上方案,可以有效保证MySQL和Elasticsearch数据一致性。 #### 引用[.reference_title] - *1* *3* [如何高效实现 MySQL 与 elasticsearch 的数据同步](https://blog.csdn.net/xxxzzzqqq_/article/details/129556812)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [淘宝太细了:mysqles 的5个一致性方案,你知道吗?](https://blog.csdn.net/crazymakercircle/article/details/130966907)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值