文章转载自:

https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484377&idx=1&sn=199bc88f700f427f4515afac4c7402f1&chksm=eaa82bf1dddfa2e7c9f4319b52fc7a5ab721531039b928ce9624bfa26c6030f3f33167b827fd&scene=21#wechat_redirect

题记

关系型数据库Mysql/Oracle增量同步Elasticsearch是持续关注的问题,也是社区、QQ群等讨论最多的问题之一。
问题包含但不限于:
1、Mysql如何同步到Elasticsearch?
2、Logstash、kafka_connector、canal选型有什么不同,如何取舍?
3、能实现同步增删改查吗? .....
本文给出答案。

1、Canal同步

1.1 canal官方已支持Mysql同步ES6.X

同步原理,参见之前: 干货 | Debezium实现Mysql到Elasticsearch高效实时同步。

canal 1.1.1版本之后, 增加客户端数据落地的适配及启动功能。canal adapter 的 Elastic Search 版本支持6.x.x以上。

需要借助adapter实现。

1.2 同步效果

1)已验证:仅支持增量同步,不支持全量已有数据同步。这点,canal的初衷订位就是“阿里巴巴mysql数据库binlog的增量订阅&消费组件”。

2)已验证:由于采用了binlog机制,Mysql中的新增、更新、删除操作,对应的Elasticsearch都能实时新增、更新、删除。

3)推荐使用场景

canal适用于对于Mysql和Elasticsearch数据实时增、删、改要求高的业务场景。

实时场景要求不高的业务场景,logstashinputjdbc也能满足。

建议,做好选型甄别。

2、同步版本:

ES:6.6.1

Mysql: 5.7.25

canal:v1.1.3-alpha-2

canal-adapter:v1.1.3-alpha-2

canal下载地址:https://github.com/alibaba/canal/releases

3、同步步骤解读

3.1 启动canal,可作为常驻进程后台运行。

官网已有详细描述https://github.com/alibaba/canal/wiki/QuickStart,

以下仅列举关键注意事项。

对应下载文件:canal.deployer-1.1.3-SNAPSHOT.tar.gz, 可以实时关注最新版本。

3.1.1 启用binlog

canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的binlog写入功能,建议配置binlog模式为row.

[mysqld]

log-bin=mysql-bin #添加这一行就ok

binlog-format=ROW #选择row模式

server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复

3.1.2 修改配置文件

vi conf/example/instance.properties

配置数据库基本信息。

3.1.3 启动canal

bin/startup.sh可通过日志排查错误。

3.2 配置ElasticSearch适配器,并实现同步。

官网已有详细描述:https://github.com/alibaba/canal/wiki/Sync-ES。

以下仅针对部署遇到的坑做描述。

3.2.1 部署版本

anal.adapter-1.1.3-SNAPSHOT.tar.gz,如有更新,建议使用最新版本。

3.2.2 核心配置

[root@localhost es]# cat mytest_user.yml 

dataSourceKey: defaultDS

destination: example

esMapping:

  _index: baidu_index

  _type: _doc

  _id: _id

  pk: id

  sql: "select a.id as _id, a.title, a.url, a.publish_time, a.content, 

        from baidu_info as a"

#  objFields:

#    _labels: array:;

  etlCondition: "where a.id >= 1"

  commitBatch: 3000

实现目的:库表id字段作为Elasticsearch的_id,以期实现自增。

4、多表关联实现

建议参考官网:https://github.com/alibaba/canal/wiki/Sync-ES

支持:

一对一

一对多

多对多

5、坑

坑1:canal.adapter-1.1.2 启动失败

启动失败:https://github.com/alibaba/canal/issues/1513

该问题在1.1.3版本已经修复。

坑2:不支持全量同步

全量同步建议使用logstash或者其他工具:

坑3:必须先在ES创建好对应索引的Mapping

否则,会没有识别索引,会报写入错误。

坑4:多张表的同步如何实现?

在canal.adapter-1.1.3/conf/es的新增*.yml配置即可。

也就是说,可以一张Mysql表一个配置文件。

坑5:空指针异常错误

解决方案:sql语句部分,指定对应库表id为ES中的_id,否则会报错。

举例:

select sx_sid as _id, name from baidu_info

坑6:基于 row 模式的 binlog 会不会记录变更前、变更后的值呢?

INSERT:只有变更后的值。

UPDATE:包含了变更前、变更后的值。

DELETE:变更前的值

关于全量同步:https://github.com/alibaba/canal/issues/376

6 同步选型小结

以上不同选型各有利弊,建议 结合实际业务斟酌选择。

几篇关于MySQL数据同步到Elasticsearch的文章---第二篇:canal 实现Mysql到Elasticsearch实时增量同步的更多相关文章

  1. MySQL数据实时增量同步到Kafka - Flume

    转载自:https://www.cnblogs.com/yucy/p/7845105.html MySQL数据实时增量同步到Kafka - Flume   写在前面的话 需求,将MySQL里的数据实时 ...

  2. 几篇关于MySQL数据同步到Elasticsearch的文章---第一篇:Debezium实现Mysql到Elasticsearch高效实时同步

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484358&idx=1&sn=3a78347 ...

  3. canal 实现Mysql到Elasticsearch实时增量同步

    简介: MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据 ...

  4. orcale增量全量实时同步mysql可支持多库使用Kettle实现数据实时增量同步

    1. 时间戳增量回滚同步 假定在源数据表中有一个字段会记录数据的新增或修改时间,可以通过它对数据在时间维度上进行排序.通过中间表记录每次更新的时间戳,在下一个同步周期时,通过这个时间戳同步该时间戳以后 ...

  5. WINDOWS下更改MYSQL数据路径(datadir)后服务启动1067解决不能改变mysql数据库存储位置

    晚上安装完MYSQL(系统:深度WINXPSP2, MYSQL版本:5.1.32)后,用MYSQL自带的配置工具配置完发现默认的数据存放路径是:C:/Documents and Settings/Al ...

  6. [转]分析MySQL数据类型的长度【mysql数据字段 中length和decimals的作用!熟悉mysql必看】

    转载自:http://blog.csdn.net/daydreamingboy/article/details/6310907 分析MySQL数据类型的长度 MySQL有几种数据类型可以限制类型的&q ...

  7. rsync无密码实时增量同步

    rsync -azvP /rsync/ --password-file=/etc/rsyncd/rsyncd.password  ruiy@192.168.11.199:/rsync/ rsync - ...

  8. 使用logstash同步MySQL数据到ES

    使用logstash同步MySQL数据到ES 版权声明:[分享也是一种提高]个人转载请在正文开头明显位置注明出处,未经作者同意禁止企业/组织转载,禁止私自更改原文,禁止用于商业目的. https:// ...

  9. flink-cdc同步mysql数据到hive

    本文首发于我的个人博客网站 等待下一个秋-Flink 什么是CDC? CDC是(Change Data Capture 变更数据获取)的简称.核心思想是,监测并捕获数据库的变动(包括数据 或 数据表的 ...

随机推荐

  1. springboot集成redis集群

    1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  2. AI写代码! 神器copilot介绍+安装+使用

    !郑重提示!!!!!!!: 正在学编程.算法的同学请千万不要依赖此插件,否则你可能甚至无法手写出一个for循环 AI帮我写代码?我帮AI写代码?庄周梦蝶?蝶梦庄周?十分梦幻. copilot在VSco ...

  3. 基于ABP实现DDD--领域逻辑和应用逻辑

      本文主要介绍了多应用层的问题,包括原因和实现.通过理解介绍了如何区分领域逻辑和应用逻辑,哪些是正确的实践,哪些是不推荐的或者错误的实践. 一.多应用层的问题 1.多应用层介绍   不知道你们是否会 ...

  4. 在CentOS上安装MPI以及MPI入门编程笔记

    一.准备工作 更新yum库 yum update 下载相关依赖包 yum install wget -y yum install gcc gcc-c++ gcc-fortran kernel-deve ...

  5. redux和dva

    实习的时候,公司使用的是react,react说实话生态学的还不是很完善,就暂时先不做跟react相关的博客,等以后学好了react全家桶之后,专门再总结一下react的内容 这两天看了公司的alit ...

  6. odoo 14 一些常见问题集

    1 # 当你往tree或者form视图中增加action的时候 2 # 记住!千万别重名 3 # 一旦重名,Export.Delete.Archive.Unarchive都会消失不见 4 # tree ...

  7. Python 支付宝红包二维码制作步骤分享

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! 支付宝红包二维码制作步骤分享 2022. ...

  8. 一文带你了解webrtc基本原理(动手实现1v1视频通话)

    webrtc (Web Real-Time Communications) 是一个实时通讯技术,也是实时音视频技术的标准和框架. 大白话讲,webrtc是一个集大成的实时音视频技术集,包含了各种客户端 ...

  9. DolphinScheduler 功能开发:⼯作流级别任务空跑(后端),测试工作流是否正确执行...

    点击上方 蓝字关注我们 ✎ 编 者 按 在今年由中国科学院软件研究所主办的开源软件所供应链点亮计划-开源之夏活动中,有不少小伙伴提交了关于 DolphinScheduler 的项目,本期是来自成都信息 ...

  10. Flask像Jenkins一样构建自动化测试任务

    flask这个框架很轻量,做一些小工具还是可以很快上手的. 1.自动化 某一天你入职了一家高大上的科技公司,开心的做着软件测试的工作,每天点点点,下班就走,晚上陪女朋友玩王者,生活很惬意. 但是美好时 ...