首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

通过MySQL binlog日志,使用canal同步分库分表数据,到 Elasticsearch

  • 25-04-25 08:41
  • 2377
  • 9350
blog.csdn.net

前言
通过简单干净实践的方式教会读者,配置出一套 Canal 工具服务,来同步分库分表的数据到 Elasticsearch 文件夹系统中。同时在 SpringBoot 工程中,配置出两套数据源,一套是 MySQL + MyBatis,一套是 Elasticsearch + MyBatis。【这是非常重要的设计手段】

工程代码里面已提供完整需要的本次环境的docker安装环境 如下的目录
docs/dev-ops/tech-canal-docker-compose.yml:提供了所需的环境安装,mysql、canal-server、canal-adapter、elasticsearch、kibana

组件
在这里插入图片描述
canal ,译为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。

它的工作原理是,canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议。在 MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal ) 这样 canal 再解析 binary log (binlog)进行配置分发,同步到 Elasticsearch 等系统中进行使用。

那么有了 canal 就可以把分库分表的数据同步到 Elasticsearch,提供汇总查询和聚合操作,也就不需要把轮训每个分库分表数据了。

测试预期
案例会把MySQL,2库4表的数据,通过 Sharding 分库分表写入数据后,同步到 Elasticsearch。分库分表如下(环境安装中会自动安装数据库和设置库表);

环境安装
部署环境
在这里插入图片描述
如果是在 Linux 安装了 docker 可以把 dev-ops 整个文件夹都上传到云服务器,之后通过脚本;

docker-compose -f xfg-dev-tech-canal-docker-compose.yml up -d
  • 1

进行安装。
开启 binlog
mysql 数据同步需要创建一个 canal 的账户,之后还需要开启 binlog 日志。
在这里插入图片描述
在这里插入图片描述
1:在 mysql 配置文件夹中,设置了初始化授权的账户、导入的库表,以及开启 mysql-bin 和配置要采集的库。
2:如果你有配置自己其他的库要同步也可以如此配置。
库表采集配置
在这里插入图片描述
本文选择的是 es 同步方式,所以需要在 canal-adapter 中 es7 文件夹添加同步的库表 yml 配置。

以及在 application.yml 中配置出需要链接的库表以及同步的目标地址,也就是 es 的地址。【因为本文的案例是在同一个 docker compose 下安装,所以直接用名称 elsticsearch 即可访问】

环境运行状态
在这里插入图片描述
安装完成后可以进入 portainer 查看各个组件的运行,如果有哪个运行失败了,可以点击那个小文件的图标,它可以查看日志。

创建索引
在 doc/dev-ops/curl 下提供了创建 Elasticsearch 的脚本;你可以点击执行或者直接复制执行,也可以复制导入到 ApiPost 里执行。

以上这些脚本是为了创建出数据库表同步到 Elasticsearch 后对应的索引和映射的字段。文章下面会用到。
创建

curl -X PUT "127.0.0.1:9200/tech.user_order" -H 'Content-Type: application/json' -d'
{
   
    "mappings": {
   
      "properties": {
   
        "_user_id":{
   "type": "text"},
        "_user_name":{
   "type": "text"},
        "_order_id":{
   "type": "text"},
        "_uuid":{
   "type": "text"},
        "_create_time":{
   "type": "date"},
        "_update_time":{
   "type": "date"}
      }
    }
}'

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

添加

curl -X PUT "127.0.0.1:9200/tech.user_order/_mapping" -H 'Content-Type: application/json' -d'
{
   
  "properties": {
   
    "_sku_name": {
   
      "type": "text"
    }
  }
}'

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

删除

curl -X DELETE "127.0.0.1:9200/tech.user_order"

  • 1
  • 2

创建索引(Kibana)
地址:http://127.0.0.1:5601/app/management/kibana/indexPatterns
在这里插入图片描述
数据页面
http://127.0.0.1:5601/app/discover
在这里插入图片描述
许可证
kibana 提供了免费30天的试用许可,安装后可以使用 x-pack-sql-jdbc。它的好处是可以让我们通过 MyBatis 的方式查询 Elasticsearch 数据。

地址:http://127.0.0.1:5601/app/management/stack/license_management
在这里插入图片描述
Elasticsearch 提供了 x-pack-sql-jdbc,让对 Elasticsearch 的查询也可以像使用 MySQL 数据库一样通过 MyBatis 进行查询。但这个 x-pack-sql-jdbc 是付费的,免费可以使用 30 天。之后你可以选择使用重新安装,破解,或者使用 Elasticsearch 的查询方式。还可以自己开发一个 Elasticsearch JDBC,GitHub 上也有类似的组件。
使用时需要引入 POM 配置;


<dependency>
    <groupId>org.elasticsearch.plugingroupId>
    <artifactId
  • 1
  • 2
  • 3
注:本文转载自blog.csdn.net的的文章"https://blog.csdn.net/CSDN_LiMingfly/article/details/144762674"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

132
搜索
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top