使用canal实现MySQL 8 增量同步数据到 ElasticSearch 7.15.2中 linux
文章目录
- 一、清空控制台
- 1. 清空控制台
- 2. 修改数据
- 3. 监控数据
- 4. 数据变化
- 5. 索引查询
- 6. 预期性能评估
- 7. 增量同步分析
- 二、验证方案
- 2.1. 把shop索引删除
- 2.2. 重建shop索引
- 2.3. 修改id=取得数据
- 2.4. 查看shop索引数据
- 2.4. 修改分类表数据
- 2.6. 监控
- 2.7. 查看shop索引数据
- 2.8. 总结
- 2.9. 解决方案
一、清空控制台
1. 清空控制台
清空canal.adapter控制台
cd /app/canal/canal.adapter
tail -f logs/adapter/adapter.log
2. 修改数据
修改mysql的id=1的name的数据,将陕西22面馆(北京亦庄
改为gblfy陕西面馆(北京亦庄)
3. 监控数据
监控canal.adapter控制台
4. 数据变化
{"data": [{"id": 1,"created_at": 1637308432000,"updated_at": 1640159632000,"name": "gblfy陕西面馆(北京亦庄)","remark_score": 4.9,"price_per_man": 156,"latitude": 31.195341,"longitude": 120.915855,"category_id": 1,"tags": "新开业 人气爆棚","start_time": "10:00","end_time": "22:00","address": "船厂路36号","seller_id": 1,"icon_url": "/static/image/shopcover/xchg.jpg"}],"database": "dianpingdb","destination": "example","es": 1637644424000,"groupId": "g1","isDdl": false,"old": [{"name": "陕西22面馆(北京亦庄)"}],"pkNames": ["id"],"sql": "","table": "shop","ts": 1637644425043,"type": "UPDATE"
}
Affected indexes: shop
从上面可以看出,canal.adapter监控到了我的数据变化,并进行增量的数据的同步到ES7中。
5. 索引查询
# 查询shop索引
GET /shop/_search
{"query": {"match": {"name": "gblfy"}}
}
6. 预期性能评估
我们要求最大性能(理论上):当用户修改id=1 中name的数据的值,其他索引的内容都不应该发生变化,仅仅对我对修改的id=1 中name的数据的值发生变化。
我们在配置canal.adapter的shop.xml中的sql时,是一个全量的sql。
SELECTa.id,a.NAME,a.tags,CONCAT( a.latitude, ',', a.longitude ) AS location,a.remark_score,a.price_per_man,a.category_id,b.`name` AS category_name,a.seller_id,c.remark_score AS seller_remark_score,c.disabled_flag AS seller_disabled_flag
FROMshop aINNER JOIN category b ON a.category_id = b.idINNER JOIN seller c ON c.id = a.seller_id
7. 增量同步分析
sql中没有指定具体要求的数据的id,那canal.adapter怎么监控到我数据发生变化后,只同步我修改ID=1的这条数据呢?
二种解释:
第一种:
canal.adapter内部做了一个这样的机制;
当我修改ID=1的数据时,canal.adapter通过全量sql就可以把id=1的数据筛选出来,然后进行增量同步到es7的索引中。第二种:
canal.adapter 内部武这样监控的机制,只要数据发生变化,就执行全量sql,做全量同步,只不过已经存在而索引让es7做更新操作而已。
二、验证方案
2.1. 把shop索引删除
# 删除shop索引
DELETE /shop
2.2. 重建shop索引
PUT /shop
{"settings": {"number_of_shards": 1,"number_of_replicas": 1}, "mappings": {"properties": {"id":{"type": "integer"},"name":{"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},"tags":{"type": "text","analyzer": "whitespace","fielddata": true},"location":{"type": "geo_point"},"remark_score":{"type": "double"},"price_per_man":{"type": "integer"},"category_id":{"type": "integer"},"category_name":{"type": "keyword"},"seller_id":{"type": "integer"},"seller_remark_score":{"type": "double"},"seller_disabled_flag":{"type": "integer"}}}
}
2.3. 修改id=取得数据
把id=1的name值由gblfy陕西面馆(北京亦庄)
改成com.gblfy陕西面馆(北京亦庄)
2.4. 查看shop索引数据
# 查询shop索引
GET /shop/_search
从上面查询结果来看符合预期,对吧!
2.4. 修改分类表数据
把category表中id=1中的name值美食5
修改成美食8
说明:
2.6. 监控
从截图中可以看出也监控到了,对吧,别急!
2.7. 查看shop索引数据
从上面截图中可以看到,数据canal.adapter 虽然监控到了,但是,es7中的数据没更新。
2.8. 总结
官网自带的canal.adapter 组件
canal.adapter 对单表增量同步,是支持的
一对一形式:mysql的一张表对应es的一个index
canal.adapter 对聚合sql(也就是多表查询),不支持
2.9. 解决方案
我们可以通过代码方式,可以自定义我们对于canal.adapter 的行为的能力。使用canal.deployer建立和mysql数据binlog之间的能力,摒弃掉canal.adapter,在点评搜索的应用当中,直接接入canal.deployer,以canal.deployer消费端的身份去消费我们对应的消息。
使用canal实现MySQL 8 增量同步数据到 ElasticSearch 7.15.2中 linux相关推荐
- MySQL从零到一解读增量同步数据到elasticsearch canal adapter方式(binlog)实现
本文是作者在单机上面从零到一实现增量同步MySQL数据到elasticsearch canal adapter方式(binlog)实现. 实现步骤 (1)安装MySQL (2)开启MySQL binl ...
- Mysql5.7使用DTS增量同步数据到MaxCompute
背景:一些客户反馈,增量同步数据到MaxCompute按照全天的数据做增量数据同步数据量太大,且不使用按天的增量同步数据,进行在MaxCompute上进行数据处理得出增量数据对于delete的相关数据 ...
- kafka对接mysql_【Canal】利用canal实现mysql实时增量备份并对接kafka
简介 canal 1.1.1版本之后, 默认支持将canal server接收到的binlog数据直接投递到MQ, 目前默认支持的MQ系统有: kafka: https://github.com/ap ...
- elastic如何和mysql同步数据_MySQL数据库之mysql 同步数据到 ElasticSearch 的方案
本文主要向大家介绍了MySQL数据库之mysql 同步数据到 ElasticSearch 的方案 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. MySQL Binlog 要通过 ...
- mysql binlog 大数据_后起之秀 | MySQL Binlog增量同步工具go-mysql-transfer实现详解
一. 概述 工作需要研究了下阿里开源的MySQL Binlog增量订阅消费组件canal,其功能强大.运行稳定,但是有些方面不是太符合需求,主要有如下三点: 需要自己编写客户端来消费canal解析到的 ...
- Mysql同步数据到Elasticsearch(实时Canal)
这里只是作为一个想法,Canal有监听binlog文件的功能.所以简单看了一下Canal的入门使用. 后续Canal实时数据同步的功能希望不会被我阉割......当然有大佬已经实现或者有其他方法实现m ...
- Clickhouse单机部署以及从mysql增量同步数据
背景: 随着数据量的上升,OLAP一直是被讨论的话题,虽然druid,kylin能够解决OLAP问题,但是druid,kylin也是需要和hadoop全家桶一起用的,我也搞不定,那只能找我能搞定的技术 ...
- clickhouse 同步mysql_ClickHouse单机部署以及从MySQL增量同步数据
背景: 随着数据量的上升,OLAP一直是被讨论的话题,虽然druid,kylin能够解决OLAP问题,但是druid,kylin也是需要和hadoop全家桶一起用的,异常的笨重,再说我也搞不定,那只能 ...
- 第02期:ClickHouse 单机部署以及从 MySQL 增量同步数据
本期作者:邓亚运 37 互娱高级 DBA,负责公司 MySQL,Redis,Hadoop,Clickhouse 集群的管理和维护. 背景 随着数据量的上升,OLAP 一直是被讨论的话题,虽然 drui ...
最新文章
- SpringCloud核心组件及其作用
- 常用控制台命令大全-Ubuntu篇
- java8 遍历目录_使用java8API遍历过滤文件目录及子目录及隐藏文件
- java 脚手架_肝了一个半月的 Java 项目快速开发脚手架:Chewing
- 第一百二十三期:免费在线制图神器!不上水印支持中文版,GitHub标星已破1万2
- android 自定义相机源码,Android 自定义相机及分析源码
- OpenGL ES总结(四)OpenGL 渲染视频画面
- 无需手机NFC 如何使用微信小程序制作amiibo卡
- 浅析HiShop、Shopex、ECshop、V5shop四大网店系统
- 数字逻辑EduCoder课设项目 厨房计时器系统设计 Logisim实现
- 桌面图标拖不动怎么办?
- 数据结构个人电话号码查询系统实验报告
- 自动化测试面试题及答案,看完后吊打面试官!
- Revit二次开发2、RevitAPI、RevitAPIUI及Revit开发三大利器
- Python编程进阶 高级变量(看完就会了)
- UDF、UDAF、UDTF之间的区别
- java实现mysql自动更新创建时间与更新时间的两种方式
- STC89C52RC - 11 - 蜂鸣器BEEP
- 我不是药神--格列卫诞生记
- 墨西哥城新机场 | 一座来自未来的机场
热门文章
- 十家全国学会就IEEE“审稿门”事件发表联合声明
- 数学不好,如何转行人工智能?
- 漫画:如何做一款比吃鸡还厉害的游戏
- mysql源码安装报错_mysql 的二进制和源码包 安装的报错总结
- c语言打不开h文件,说那个“mem.h”头文件打不开 怎么改啊 高手们帮帮忙
- Linux宏定义实现类成员函数,全面解析Linux内核的同步与互斥机制
- java多线程爬虫框架crawler4j的使用
- 历经7年双11实战,阿里巴巴是如何定义云原生混部调度优先级及服务质量的?
- 数百万台车联网设备同时在线0故障,中瑞集团的云原生探索之路 | 云原生Talk
- 如何选择适合你的企业数据管理类产品