题记

关系型数据库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 同步选型小结

以上不同选型各有利弊,建议 结合实际业务斟酌选择。 欢迎留下你的同步实践方案和思考。

公众号(zhisheng)里回复 面经、ES、Flink、 Spring、Java、JVM、Kafka、监控 等关键字可以查看更多关键字对应的文章!

关注我

相关文章

1、渣渣菜鸡为什么要看 ElasticSearch 源码?

2、渣渣菜鸡的 ElasticSearch 源码解析 —— 环境搭建

3、Elasticsearch 默认分词器

4、Elasticsearch 可用中分分词器

5、Elasticsearch 自定义分词器

6、全文搜索引擎 Elasticsearch 集群搭建入门教程

7、Elasticsearch 系列文章(三):ElasticSearch 集群监控

8、Elasticsearch 系列文章(四):ElasticSearch 单个节点监控

9、Elasticsearch 系列文章(五):ELK 实时日志分析平台环境搭建

10、教你如何在 IDEA 远程 Debug ElasticSearch

11、渣渣菜鸡的 ElasticSearch 源码解析 —— 启动流程(上)

12、渣渣菜鸡的 ElasticSearch 源码解析 —— 启动流程(下)

13、ElasticSearch 最佳性能优化

14、干货 | Elasticsearch方案选型必须了解的10件事!

增量同步_实战 | canal 实现Mysql到Elasticsearch实时增量同步相关推荐

  1. mysql 分词搜索_实战 | canal 实现Mysql到Elasticsearch实时增量同步

    题记 关系型数据库Mysql/Oracle增量同步Elasticsearch是持续关注的问题,也是社区.QQ群等讨论最多的问题之一. 问题包含但不限于: 1.Mysql如何同步到Elasticsear ...

  2. flink实时同步mysql_基于Canal与Flink实现数据实时增量同步(一)

    点击上方蓝色字体,关注我 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 准备 配置 ...

  3. 增量更新同步_干货 | Debezium实现Mysql到Elasticsearch高效实时同步

    点击蓝色"SpringForAll社区"关注我哟 题记 来自Elasticsearch中文社区的问题-- MySQL中表无唯一递增字段,也无唯一递增时间字段,该怎么使用logsta ...

  4. golang mysql数据同步_使用Golang实现MySQL数据库之间的表同步

    这是用来实现两个 MySQL 数据库中的具有相同字段表的增量同步. 支持按照某种格式增量获取表中的待同步数据. 支持按照列名称向 数据库 的表中批量插入待同步的数据. 安装 go get -u git ...

  5. MySQL 到 MongoDB 实时数据同步实操分享

    MySQL数据怎么实时同步到 MongoDB 实践分享系列 摘要:很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同 ...

  6. MySQL 到 PostgreSQL 实时数据同步实操分享

    摘要:很多 DBA 和开发同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同步.最近了解到一款实时数据同步工具 Tapdata C ...

  7. es mysql 同步插件_[es和数据库怎么同步]mysql与elasticsearch实时同步常用插件及优缺点对比(ES与关系型数据库同步)...

    目前mysql与elasticsearch常用的同步机制大多是基于插件实现的,常用的插件包括:elasticsearch-jdbc,elasticsearch-river-MySQL,go-mysql ...

  8. MySQL到Elasticsearch实时同步构建数据检索服务的选型与思考

    前言 本文具体探讨 MySQL 数据实时同步到 Elasticsearch (以下简称 ES ) 技术方案和思考,同时使用一定篇幅介绍一些前置知识,从理论到实践,让读者更好的理解这块内容和相关问题.包 ...

  9. mysql主从增量同步_生产环境中mysql主从同步/完整/增量备份

    环境:某项目的DB19数据库服务器,无从库也无开过binlog日志,负载有时比较高但基本运行稳定.备份情况:本地每天完整备份保留一周再rsync到异地备份机保留一月,由于数据量的增长加上每天晚上rsy ...

最新文章

  1. 无线网卡实现AP 热点功能,共享Internet连接设置
  2. oracle供应商导入,AP供应商导入简例.pdf
  3. Linux系统管理员的Bash指南,11条Bash实践经验!
  4. Linux学习之常用技巧
  5. [读书笔记] - 《深度探索C++对象模型》第5章 构造、解构、拷贝语意学
  6. 2014乌云安全峰会文字版记录
  7. SSH远程登陆配置sshd_config文件详解
  8. Linux(1)之文件“776”
  9. 计算机图形学(九)-纹理的应用,环境贴图、凹凸贴图、法线贴图、位移贴图
  10. android bitmap 去锯齿,bitmap缩放时抗锯齿
  11. 西电计算机学院通知,西安电子科技大学计算机科学与技术学院关于发放2020级硕士研究生正式录取通知书的通知...
  12. java导出txt文件列对齐
  13. m3u8简单教程之巨齿鲨下载
  14. 标准证件照电子版怎么做?
  15. android 加密手机功能,怎么为安卓手机加密
  16. 基于Android高校图书馆推荐书目系统
  17. 作业要求20190919-2 功能测试
  18. 单应性Homography梳理,概念解释,传统方法,深度学习方法
  19. 如安在Linux的把持琐屑下应用假造光驱
  20. MoE(Mixture of Expert)简单research

热门文章

  1. matlab2c使用c++实现matlab函数系列教程-sin函数
  2. jquery层次选择器:空格 > next + nextAll ~ siblings
  3. android 默认dimens_Android开发——自动生成Android屏幕适配的dimens.xml文件
  4. 十八.搭建Nginx服务器、配置网页认证、基于域名的虚拟主机、ssl虚拟主机
  5. 【Python】Scrapy入门实例
  6. 【Java】【编译】javac编译源代码时,若源文件使用了别的java源代码的函数,javac会自动关联。...
  7. 看懂别人的代码,和自己能写代码是两回事
  8. 《数据结构与算法分析:C语言描述》复习——第六章“排序”——插入排序
  9. VB MSFlexGrid控件使用问题
  10. 四六级英语都考过,让你见识一下“八级程序员”