东莞易进网络专业网站建设 网站,北京新情况最新消息今天,做地方网站数据哪里来,住房与城乡建设局网站题记关系型数据库Mysql/Oracle增量同步Elasticsearch是持续关注的问题#xff0c;也是社区、QQ群等讨论最多的问题之一。 问题包含但不限于#xff1a; 1、Mysql如何同步到Elasticsearch? 2、Logstash、kafka_connector、canal选型有什么不同#xff0c;如何取舍#xff1… 题记关系型数据库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、同步版本ES6.6.1Mysql: 5.7.25canalv1.1.3-alpha-2canal-adapter:v1.1.3-alpha-2canal下载地址https://github.com/alibaba/canal/releases3、同步步骤解读3.1 启动canal可作为常驻进程后台运行。官网已有详细描述https://github.com/alibaba/canal/wiki/QuickStart 以下仅列举关键注意事项。对应下载文件canal.deployer-1.1.3-SNAPSHOT.tar.gz 可以实时关注最新版本。3.1.1 启用binlogcanal的原理是基于mysql binlog技术所以这里一定需要开启mysql的binlog写入功能建议配置binlog模式为row.[mysqld]log-binmysql-bin #添加这一行就okbinlog-formatROW #选择row模式server_id1 #配置mysql replaction需要定义不能和canal的slaveId重复3.1.2 修改配置文件vi conf/example/instance.properties配置数据库基本信息。3.1.3 启动canalbin/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 核心配置[rootlocalhost es]# cat mytest_user.yml dataSourceKey: defaultDSdestination: exampleesMapping: _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、坑坑1canal.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/3766 同步选型小结以上不同选型各有利弊建议 结合实际业务斟酌选择。 欢迎留下你的同步实践方案和思考。公众号(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 ElasticSearch11、渣渣菜鸡的 ElasticSearch 源码解析 —— 启动流程(上)12、渣渣菜鸡的 ElasticSearch 源码解析 —— 启动流程(下)13、ElasticSearch 最佳性能优化14、干货 | Elasticsearch方案选型必须了解的10件事