mysql 分词搜索_实战 | canal 实现Mysql到Elasticsearch实时增量同步
题记
关系型数据库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件事!
mysql 分词搜索_实战 | canal 实现Mysql到Elasticsearch实时增量同步相关推荐
- flink实时同步mysql_基于Canal与Flink实现数据实时增量同步(一)
点击上方蓝色字体,关注我 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 准备 配置 ...
- mysql 分词搜索_打造一个蓝奏云网盘搜索引擎
目前存在的网盘搜索引擎好多,可以归于两类: 1.搜索引擎索引 2.爬虫入库索引 第一种:搜索引擎索引 这种索引方式是目前比较主流的方式,依靠百度,谷歌建立索引链接,当用户进行搜索的时候,网盘搜索引擎会 ...
- 增量同步_实战 | canal 实现Mysql到Elasticsearch实时增量同步
题记 关系型数据库Mysql/Oracle增量同步Elasticsearch是持续关注的问题,也是社区.QQ群等讨论最多的问题之一. 问题包含但不限于: 1.Mysql如何同步到Elasticsear ...
- canal解析mysql日志异常_利用Canal解析mysql binlog日志
一.安装包下载(canal.deployer-x.x.x.tar.gz 官方建议使用1.0.22版本) 二.解压文件 tar -zxvf canal.deployer-1.0.22.tar.gz - ...
- mysql增量同步kafka_MySQL数据实时增量同步到Kafka - Flume
写在前面的话 需求,将MySQL里的数据实时增量同步到Kafka.接到活儿的时候,第一个想法就是通过读取MySQL的binlog日志,将数据写到Kafka.不过对比了一些工具,例如:Canel,Dat ...
- 简单实现MySQL数据实时增量同步到Kafka————Maxwell
任务需求:将MySQL里的数据实时增量同步到Kafka 1.准备工作 1.1.MySQL方面:开启BinLog 1.1.1.修改my.cnf文件 vi /etc/my.cnf [mysqld] ser ...
- mysql同步mongodb_MySQL数据实时增量同步到MongoDB
一.go-mysql-transfer go-mysql-transfer是使用Go语言实现的MySQL数据库实时增量同步工具.能够实时监听MySQL二进制日志(binlog)的变动,将变更内容形成指 ...
- 数据实时增量同步之CDC工具—Canal、mysql_stream、go-mysql-transfer、Maxwell
数据实时增量同步之CDC工具-Canal.mysql_stream.go-mysql-transfer.Maxwell 什么是CDC? CDC工具对比 实现原理: Mysql binlog 讲解: m ...
- mysql 当前用户连接数_实战:判断mysql中当前用户的连接数-分组淘选
实战:判断mysql中当前用户的连接数-分组筛选 #connets.sh #!/bin/sh #ocpyang@126.com #根据输入参数u或d来显示出对应的用户名或数据库名中用户的连接数. #也 ...
最新文章
- sql 查询慢的48个原因分析
- 大连海事学院计算机研究生多少分,大连海事大学计算机或软件工程研究生多少分能录取...
- 游戏行业的人工智能设计:AI的设计和实施
- Mybatis Interceptor 拦截器原理 源码分析
- linux block设备,Linux I/O Block--块设备的表示
- form里面的action和method(post和get的方法)使用
- ssm网上书城系统毕业设计-附源码180919
- 自动驾驶与移动边缘计算
- android 7.0 8.0 9.0 10.0修改默认输入法为谷歌输入法(RK MTK 展讯等平台都适用)
- *LOJ#2134. 「NOI2015」小园丁与老司机
- 现代公司制度的法理学基础 (贾登勋 王勇)
- 无人驾驶虚拟仿真(四)--通过ROS系统控制小车行走
- ros中rviz不显示摄像头视频问题的解决
- Nand Flash管理算法介绍之FTL简介
- 如何设置对输入字段的关注?
- spring boot过滤器FilterRegistrationBean
- 数学建模:种群竞争模型
- SecureCRT8.3+SecureCRT_keygen完成注册
- 索尼神话破灭:急功近利 丧失激情 挑战精神消失 创新能力衰退
- 离职申请一个月了没同意可以走吗
热门文章
- 记录更新(Java数据类)
- 批处理 设置电脑最佳性能_批处理最佳做法
- 在Google Cloud Platform的K8上运行Fn函数
- 通过函数式编程实现动态对话框处理程序
- 如何指南:Apache Drill入门
- primefaces_PrimeFaces在GlassFish 3.1.2.2上推动大气
- spring roo_使用Spring Roo进行快速云开发–第2部分:VMware Cloud Foundry
- 可视化Java 9模块关系
- Sacrilege –自定义SWT滚动条
- 快速指南:剖析JBoss BPM跨进程通信