美文网首页
Mysql数据同步elasticsearch-canal实战

Mysql数据同步elasticsearch-canal实战

作者: AlanSun2 | 来源:发表于2020-04-28 15:32 被阅读0次

    最近我们项目需要使用到 elasticsearch(以下称 es),需要对商品数据进行索引。那这里就会有一个数据同步的问题,就是当修改数据库的数据时,数据如何导入到 es 中。一般会有这几种方案:

    • 同步导入
      • 就是在你的项目中接入 es 客户端,在写完数据库后,同步写入到 es。可以使用 aop。
    • 异步导入
      • 使用消息队列,当写完数据库后,使用消息队列异步写入到 es
      • 使用 mysql 的 binlog,异步写入到 es

    优缺点

    同步写入,很明显代码侵入行最高,并且会增大业务服务器的开销。消息队列其实已经是非常好的方案,代码侵入性较低,几乎不影响效率。当然我个人最喜欢的还是使用 binlog,因为完全和业务无耦合。

    1. canal(管道)介绍

    canal 就是一个 alibaba 出品的一个 mysql binlog 同步工具。

    工作原理

    • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
    • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
    • canal 解析 binary log 对象(原始为 byte 流)

    具体的操作

    使用 canal 完成同步操作,你必须部署两个服务:

    1. canal-server:与 mysql 通讯,对数据进行解析,把数据传给下游
    2. canal-adapter:和 canal-server 通讯,目前支持把数据导入到 es,RDB,Hbase

    上面提到的下游不仅仅可以是 canal-adapter 还可以是 Kafka/RocketMQClientAdapterjava 客户端
    此外 canal-server 也支持 Prometheus 监控。

    canal-server docker 部署
    1. 启动文件
      canal-server github
    canal-adapter docker 部署
    1. dockerfile 地址
      canal-adapter Dockerfile

    2. 启动文件
      canal-adapter start

    3. 使用 canal-adapter 填坑

    • sql 必须要有 scheme
    • 字段不要加 ``,例如,status 不要写成
    `status`
    

    相关文章

      网友评论

          本文标题:Mysql数据同步elasticsearch-canal实战

          本文链接:https://www.haomeiwen.com/subject/evpayhtx.html