文章目录

  • 一、清空控制台
    • 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相关推荐

  1. MySQL从零到一解读增量同步数据到elasticsearch canal adapter方式(binlog)实现

    本文是作者在单机上面从零到一实现增量同步MySQL数据到elasticsearch canal adapter方式(binlog)实现. 实现步骤 (1)安装MySQL (2)开启MySQL binl ...

  2. Mysql5.7使用DTS增量同步数据到MaxCompute

    背景:一些客户反馈,增量同步数据到MaxCompute按照全天的数据做增量数据同步数据量太大,且不使用按天的增量同步数据,进行在MaxCompute上进行数据处理得出增量数据对于delete的相关数据 ...

  3. kafka对接mysql_【Canal】利用canal实现mysql实时增量备份并对接kafka

    简介 canal 1.1.1版本之后, 默认支持将canal server接收到的binlog数据直接投递到MQ, 目前默认支持的MQ系统有: kafka: https://github.com/ap ...

  4. elastic如何和mysql同步数据_MySQL数据库之mysql 同步数据到 ElasticSearch 的方案

    本文主要向大家介绍了MySQL数据库之mysql 同步数据到 ElasticSearch 的方案 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. MySQL Binlog 要通过 ...

  5. mysql binlog 大数据_后起之秀 | MySQL Binlog增量同步工具go-mysql-transfer实现详解

    一. 概述 工作需要研究了下阿里开源的MySQL Binlog增量订阅消费组件canal,其功能强大.运行稳定,但是有些方面不是太符合需求,主要有如下三点: 需要自己编写客户端来消费canal解析到的 ...

  6. Mysql同步数据到Elasticsearch(实时Canal)

    这里只是作为一个想法,Canal有监听binlog文件的功能.所以简单看了一下Canal的入门使用. 后续Canal实时数据同步的功能希望不会被我阉割......当然有大佬已经实现或者有其他方法实现m ...

  7. Clickhouse单机部署以及从mysql增量同步数据

    背景: 随着数据量的上升,OLAP一直是被讨论的话题,虽然druid,kylin能够解决OLAP问题,但是druid,kylin也是需要和hadoop全家桶一起用的,我也搞不定,那只能找我能搞定的技术 ...

  8. clickhouse 同步mysql_ClickHouse单机部署以及从MySQL增量同步数据

    背景: 随着数据量的上升,OLAP一直是被讨论的话题,虽然druid,kylin能够解决OLAP问题,但是druid,kylin也是需要和hadoop全家桶一起用的,异常的笨重,再说我也搞不定,那只能 ...

  9. 第02期:ClickHouse 单机部署以及从 MySQL 增量同步数据

    本期作者:邓亚运 37 互娱高级 DBA,负责公司 MySQL,Redis,Hadoop,Clickhouse 集群的管理和维护. 背景 随着数据量的上升,OLAP 一直是被讨论的话题,虽然 drui ...

最新文章

  1. SpringCloud核心组件及其作用
  2. 常用控制台命令大全-Ubuntu篇
  3. java8 遍历目录_使用java8API遍历过滤文件目录及子目录及隐藏文件
  4. java 脚手架_肝了一个半月的 Java 项目快速开发脚手架:Chewing
  5. 第一百二十三期:免费在线制图神器!不上水印支持中文版,GitHub标星已破1万2
  6. android 自定义相机源码,Android 自定义相机及分析源码
  7. OpenGL ES总结(四)OpenGL 渲染视频画面
  8. 无需手机NFC 如何使用微信小程序制作amiibo卡
  9. 浅析HiShop、Shopex、ECshop、V5shop四大网店系统
  10. 数字逻辑EduCoder课设项目 厨房计时器系统设计 Logisim实现
  11. 桌面图标拖不动怎么办?
  12. 数据结构个人电话号码查询系统实验报告
  13. 自动化测试面试题及答案,看完后吊打面试官!
  14. Revit二次开发2、RevitAPI、RevitAPIUI及Revit开发三大利器
  15. Python编程进阶 高级变量(看完就会了)
  16. UDF、UDAF、UDTF之间的区别
  17. java实现mysql自动更新创建时间与更新时间的两种方式
  18. STC89C52RC - 11 - 蜂鸣器BEEP
  19. 我不是药神--格列卫诞生记
  20. 墨西哥城新机场 | 一座来自未来的机场

热门文章

  1. 十家全国学会就IEEE“审稿门”事件发表联合声明
  2. 数学不好,如何转行人工智能?
  3. 漫画:如何做一款比吃鸡还厉害的游戏
  4. mysql源码安装报错_mysql 的二进制和源码包 安装的报错总结
  5. c语言打不开h文件,说那个“mem.h”头文件打不开 怎么改啊 高手们帮帮忙
  6. Linux宏定义实现类成员函数,全面解析Linux内核的同步与互斥机制
  7. java多线程爬虫框架crawler4j的使用
  8. 历经7年双11实战,阿里巴巴是如何定义云原生混部调度优先级及服务质量的?
  9. 数百万台车联网设备同时在线0故障,中瑞集团的云原生探索之路 | 云原生Talk
  10. 如何选择适合你的企业数据管理类产品