Canal增量同步MySQL数到Elasticsearch

Canal增量同步MySQL数到Elasticsearch

调研背景

由于业务发展迅速,店铺商品分库越来越多(目前已有8个MySQL分库)且分库中表数据行数越来越大,大的表已经达到了5KW+,业务需要对商品模糊查询或根据其他字段查询,这些查询的字段很多在数据库中都没有索引,查询命中数据很慢(有些数据根本就查询不出来)且会给数据库库带来很大的压力.所以目前希望将MySQL中的商品数据实时同步到Elasticsearch,利用ES的强大搜索性能来满足我们当前的业务需求.

功能需求

  1. 首先需要一个稳定的能存储数据达到TB级别的ES集群;
  2. 其次需要将所有店铺商品分库中已有的所有数据初始化到ES集群;
  3. 最后后需要实时同步所有店铺商品分库中发生变更的记录到ES集群保证后续数据一致性;

技术需求

  1. 需要一个能迁移大数据量的方案用于第一次初始化;(后续调研)
  2. 需要一个能实时同步变更数据的方案保证数据一致性;(即本次调研的中间件Canal)

Canal简介

Canal是阿里巴巴开源的 基于数据库增量日志解析,提供增量数据订阅&消费的数据同步中间件,在阿里内部也有长时间的使用.

GitHub地址: https://github.com/alibaba/canal

Canal简介地址: https://github.com/alibaba/canal/wiki/Introduction

 

工作原理

mysql主备复制实现


1.master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);从上层来看,复制分成三步:

2.slave将master的binary log events拷贝到它的中继日志(relay log);

3.slave重做中继日志中的事件,将改变反映它自己的数据。

canal的工作原理


canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议原理相对比较简单:

  1. mysql master收到dump请求,开始推送binary log给slave(也就是canal)
  2. canal解析binary log对象(原始为byte流)

架构


server代表一个canal运行实例,对应于一个jvm;说明:

  1. instance对应于一个数据队列 (1个server对应1..n个instance)

instance模块:

  1. eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)
  2. eventSink (Parser和Store链接器,进行数据过滤,加工,分发的工作)
  3. eventStore (数据存储)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值