Es索引同步异步Canal解耦方案
首先传统的Es索引同步耦合性太高需要使用业务逻辑来同步,一旦在同步的时候服务器出现异常就用可能同步失败导致影响到其他业务,这里使用的是Canal中间件来实现异步同步索引。
简述:
这里以电商项目为例,当需要添加,修改或删除商品时为了电商的查询服务能够获取到最新的索引,我们需要同步数据库的商品数据。此时Canal会监听到商品表的数据变化,当数据库的商品表发生变化时Canal会将变化的数据发送到mq的消息队列,这一步是为了保证消息不丢失,再由监听相应消息队列的listener接收消息,解析并存入Es。
具体流程如下:
1.监听数据变化
• Canal 通过监听数据库的 binlog 日志,捕获商品表的增删改操作。
2.消息投递
• 当商品表发生变更时,Canal 会将变更数据发送至 消息队列(MQ),以此保证数据传递的可靠性与不丢失。
3.消息消费与索引更新
• 消息监听器 订阅并消费消息队列中的数据。
• Listener 对消息内容进行解析后,将处理结果写入 Elasticsearch 索引,实现数据的最终一致性。
通过这种方式,业务逻辑与索引同步彻底解耦,系统的可靠性、可维护性和扩展性都得到显著提升。