Canal+RabbitMQ实现MySQL数据同步至ClickHouse

news2024/9/22 7:30:15

ClickHouse作为一个被广泛使用OLAP分析引擎,在执行分析查询时的速度优势很好的弥补了MySQL的不足,但是如何将MySQL数据同步到ClickHouse就成了用户面临的第一个问题。本文利用Canal来实现ClickHouse实时同步MySQL数据,使用RabbitMQ来做消息队列,给出了将MySQL多张表同步至ClickHouse同一张表的方案。

Canal简介;

Canal主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费。

工作原理:

·Canal模拟MySQL slave的交互协议,伪装自己为MySQL slave,向MySQL master发送dump协议

·MySQL master收到dump请求,开始推送binary log给slave(即Canal)

·Canal解析binary log对象(原始为byte流)

RabbitMQ简介

RabbitMQ是一款使用Erlang语言开发的,实现AMQP(高级消息队列协议)的开源消息中间件。

RabbitMQ工作过程:

53ae5ece3e541795e375231e20028ad8.jpeg

消息生产者并没有直接将消息发送给消息队列,而是通过建立Exchange(交换器)和Channel(信道),将消息发送给Exchange,Exchange根据routing key,将消息转发给指定的Queue(消息队列)。然后,消息会被消费者从队列里读取并消费。

接下来让我们开始进入实操

MySQL及ClickHouse建表示例

MySQL示例:

CREATE TABLE `test` (

`id` int(11) NOT NULL,

 `name` varchar(100) DEFAULT NULL,

 `quantity` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

)

ClickHouse示例:

CREATE TABLE default.test

(

 `id` Int32,

`name` String,

`quantity` Int32

)

ENGINE = MergeTree

PRIMARY KEY id

ORDER BY id

MySQL配置

(1)开启binlog

vi /etc/my.cnf 添加下面内容:

server-id = 1

log_bin = /var/lib/mysql/bin.log

binlog-format = row

expire_logs_days = 30

max_binlog_size= 768M

bind-address = 0.0.0.0

重启MySQL服务:

systemctl restart mysqld.service

登陆mysql,查看binlog启动情况:

show variables like 'log_%';

04d70d4eaa725f5fda21994b8024b511.jpeg

(2)新增同步账号

登陆mysql,执行下面命令,创建账号maxwell,密码为123456

CREATE USER 'maxwell'@'%' IDENTIFIED BY '123456';GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'maxwell'@'%';flush privileges;

rabbitMQ配置

登录http://IP:15672,进入rabbitMQ管理页面(账号和密码默认都是guest)

(1)新建同步用户

注1:不要使用初始guest账户,在canal连接时,权限会不够。

注2:密码中除了下划线,不要使用特殊字符,否则canal消费端配置会报错。

新建cktest用户如下:

094ccb6681e3dde6397fc0b9b7612129.jpeg

9cb795035d943d6585fccbd37f79e568.jpeg

(2)新建交换机

1d1eb5345911390cf92dbf4b3b83131e.jpeg

(3)新建队列

d5403ca77736c4f1db2ccffb3026f4cb.jpeg

(4)绑定交换机和队列

点击下图红框处

7f5eab365ac579c4d19cdb266c564fca.jpeg

绑定交换机和队列

cf1f0cee32719b807737990436b70592.jpeg

canal服务端安装配置

(1)安装

下载canal安装包

wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz

/opt下创建canal目录

mkdir canal

解压到指定目录

tar zxvf canal.deployer-1.1.5.tar.gz -C canal

0f02ced09254970f7d9df40b0c5f0643.jpeg

(2)配置

服务端要配置两个文件conf文件下canal.properties、example文件夹中的instance.properties

配置canal.properties

选择模式

49af3498f72fa9910763cddf0971d47a.jpeg

配置读取mysql二进制文件的用户名和密码

0b1f68ce56ab3bb7bfd5ad807a5d884c.jpeg

设置RabbitMQ相关属性

rabbitmq.exchange 填写mq队列相对应的交换机名称

rabbitmq.deliveryMode = 2(2表示Durable持久化)

31bb00e87644bc397a2b5a0f5100e6d2.jpeg

配置instance.properties

配置MySQL数据库的IP地址和端口

af5f7868ceeda58c37d1347f1d676d13.jpeg

设置用户和密码

504ba1017b1a4a1e57f426d3d178565e.jpeg

表过滤 (.*\\..*)所有库所有表  (xxx\\..*)指定库所有表 (xxx\\.xxx)指定库指定表,如果多个用英文逗号隔开

63797eaa89de3ee92722e61ade952e04.jpeg

canal.mq.topic=example-routingkey 配置交换机和队列的routingkey

4e68543d75543e4cad58756f627eeb42.jpeg

canal客户端安装配置

(1)安装

下载canal安装包

wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.adapter-1.1.5.tar.gz

/opt下创建canal-client目录

mkdir canal-client

解压到指定目录

tar zxvf canal.adapter-1.1.5.tar.gz -C canal-client

619e1973d92dccc63a26821c4849de94.jpeg

在lib目录下要导入几个包:

clickhouse-jdbc-qbe-0.2.4-jar-with-dependencies.jar

httpclient-4.5.5.jar

httpcore-4.4.9.jar

lz4-1.3.0.jar

lz4-java-1.4.1.jar

(2)配置

canal客户端配置包含两部分。application.yml(应用配置)和rdb文件夹中xxx.yml配置(数据映射配置)

配置application.yml

选择模式

bdb2676c03b091905fba830f6a9e2013.jpeg

rabbitMQ消费者配置

dece93d7feade3521957d5d7514e5df6.jpeg

源数据库配置

2c5f872b9e7caeffbddb13c95f640f64.jpeg

目标数据库配置

instance: ck-queue配置rabbitmq的队列

key:example-routingkey填写mq队列的key

97839059523f792a424aa17a54cb7c21.jpeg

配置mytest_user.yml

注:一个yml文件,仅可编辑一张表的映射关系,多张表就要新建多个配置文件。

dataSourceKey: 对应application.yml中的配置,默认为defaultDS

destination: 对应application.yml中的instance配置

targetTable: 目标库的目标表,不需要带数据库名称,否则会出现:库名.库名.表名的错误

mapAll: 映射关系true为全映射,false为非全映射,若为非全映射,则需要编辑targetColumns下面的配置来进行字段映射

b8b7eef64226b38e929481a7a02b4ebf.jpeg

结果演示

我们配置了mytest_user.yml、test1.yml两个文件,将MySQL中的两个表同步至ClickHouse。

启动canal,在canal目录下:

bin/startup.sh

查看server日志:

tail -200f logs/canal/canal.log

e88344db81fee160471724fe61bb3f14.jpeg

查看instance日志:

tail -200f logs/example/example.log

a1e3c7996eb512786d4858562cd1175f.jpeg

启动canal-client,在canal-client目录下:

bin/startup.sh

canal-client目录下查看日志:

tail -200f logs/adapter/adapter.log

af87e706261538fb87d6a294b3d41f75.jpeg

向MySQL的test表中写入数据

source /opt/test.sql;

可以看到canal客户端会输出如下日志:

03e54ff9bed72df253f0c84437594a59.jpeg

进入ClickHouse中查看数据

75d1abe47d7fceb08cd9cbcb9d5843a1.jpeg

再向MySQL的test1表中写入数据:

insert into test1 values(10001,'apple',13);

进入ClickHouse中查看数据

0b6639f4db2f39b0dff9ea43595eb06e.jpeg

可以看到数据已经同步至ClickHouse。

获取更多内容,欢迎关注万山数据!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1353998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】面向对象程序设计 期末复习总结

语法基础 数组自带长度属性 length&#xff0c;可以在遍历的时候使用&#xff1a; int []ages new int[10];for (int i 0; i < ages.length; i)System.out.println(ages[i]); 数组可以使用增强式for语句进行只读式遍历&#xff1a; int[] years new int[10];for (int ye…

leetcode第206题反转链表❤

一&#xff1a;题目&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网…

【占用网络】VoxFormer 基于视觉的3D语义场景方案 CVPR 2023

前言 本文分享“占用网络”方案中&#xff0c;来自CVPR2023的VoxFormer&#xff0c;它基于视觉实现3D语义场景补全。 使用Deformable Attention从图像数据中&#xff0c;预测三维空间中的体素占用情况和类别信息。 VoxFromer是一个两阶段的框架&#xff1a; 第一个阶段&…

前端框架的异步组件(Async Components)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

SpringBoot集成MQTT协议

简介 MQTT 可以被解释为一种低开销&#xff0c;低带宽占用的即时通讯协议&#xff0c;可以用较少的代码和带宽为远程设备连接提供实时可靠的消息服务&#xff0c;它适用于硬件性能低下的远程设备以及网络状况糟糕的环境下&#xff0c;因此 MQTT 协议在 IoT&#xff08;Interne…

工业物联网上篇——什么是IIOT?

工业物联网背后的理念是使用工业设施中“哑巴设备”多年来产生的数据。装配线上的智能机器不仅可以更快地捕获和分析数据&#xff0c;且在交流重要信息方面也更快&#xff0c;这有助于更快、更准确地做出业务决策。 信息技术&#xff08;IT&#xff09;和运营技术&#xff08;O…

如何打开wps的备份中心查找备份文件

备份中心在我们使用WPS Office时扮演着重要的角色。经常保存文件的同时&#xff0c;我们也应该学会备份文件&#xff0c;以免意外损失。本文将向您介绍如何使用WPS备份中心来查找并恢复备份文件&#xff0c;方便您在需要时快速找到所需文件。 图片来源于网络&#xff0c;如有侵…

STM32 学习(三)OLED 调试工具

目录 一、简介 二、使用方法 2.1 接线图 2.2 配置引脚 2.3 编写代码 三、Keil 工具调试 一、简介 在进行单片机开发时&#xff0c;有很多调试方法&#xff0c;如下图&#xff1a; 其中 OLED 就是一种比较好用的调试工具&#xff1a; OLED 硬件电路如下&#xff0c…

科技智慧,产业链全覆盖:河南恩珅德农业的养殖业务优势

河南恩珅德农业以科技智慧和全产业链覆盖的优势&#xff0c;成功打造了一体化的养殖业务模式&#xff0c;为养殖者提供了全面的支持和优越的管理体验。以下是该企业养殖业务的核心优势&#xff1a; 1. 先进科技智慧 河南恩珅德农业充分利用先进的科技手段&#xff0c;引入智能…

了解并使用django-rest-framework-jwt

一 JWT认证 在用户注册或登录后&#xff0c;我们想记录用户的登录状态&#xff0c;或者为用户创建身份认证的凭证。我们不再使用Session认证机制&#xff0c;而使用Json Web Token&#xff08;本质就是token&#xff09;认证机制。 Json web token (JWT), 是为了在网络应用环…

Android开发中“真正”的仓库模式

原文地址&#xff1a;https://proandroiddev.com/the-real-repository-pattern-in-android-efba8662b754原文发表日期&#xff1a;2019.9.5作者&#xff1a;Denis Brandi翻译&#xff1a;tommwq翻译日期&#xff1a;2024.1.3 Figure 1: 仓库模式 多年来我见过很多仓库模式的实…

c# OpenCvSharp透视矫正参数调整器

透视矫正不够智能化&#xff0c;每次都要进行局部参数调整&#xff0c;不便于程序使用&#xff0c;程序流程还是那几个步骤&#xff1b; 1、读取图像、灰度化 2、高斯滤波 3、二值化 4、边缘检测 灰度化图 上个图看看经过调整透视矫正边缘检测结果我还是挺满意的 发现一个…

Nest 框架:解锁企业级 Web 应用开发的秘密武器(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

将ipad拓展为笔记本副屏

写在前面 对比过moonlight和spacedesk两种软件&#xff08;付费的更流畅&#xff0c;本人穷困暂不涉及&#xff09;&#xff0c;moonlight无线连接感觉更卡顿一些&#xff08;但是大多数人都觉得moonlight更丝滑&#xff0c;实践是检验真理的唯一标准&#xff0c;建议自己都试…

go执行静态二进制文件和执行动态库文件

目的和需求&#xff1a;部分go的核心文件不开源&#xff0c;例如验证&#xff0c;主程序核心逻辑等等 第一个想法&#xff0c;把子程序代码打包成静态文件&#xff0c;然后主程序执行 子程序 package mainimport ("fmt""github.com/gogf/gf/v2/os/gfile"…

UⅤ机用的滚珠丝杆套装

UⅤ机用的滚珠丝杆套装 上面是单丝杆UⅤ机内部。

ES(Elasticsearch)的基本使用

一、常见的NoSQL解决方案 1、redis Redis是一个基于内存的 key-value 结构数据库。Redis是一款采用key-value数据存储格式的内存级NoSQL数据库&#xff0c;重点关注数据存储格式&#xff0c;是key-value格式&#xff0c;也就是键值对的存储形式。与MySQL数据库不同&#xff0…

我的创作纪念日三年收获和感悟

机缘 我刚开始接触创作也是最近几年开始&#xff0c;当初就是希望自己的收获分享给大家&#xff0c;不仅使自己成长&#xff0c;也可以带着大家一起成长&#xff0c;独乐乐不如众乐乐&#xff0c;人都是自私的以前我都是看到好的知识文章都是自己藏起来&#xff0c;发现收获的…

Qt/C++编写视频监控系统82-自定义音柱显示

一、前言 通过音柱控件实时展示当前播放的声音产生的振幅的大小&#xff0c;得益于音频播放组件内置了音频振幅的计算&#xff0c;可以动态开启和关闭&#xff0c;开启后会对发送过来的要播放的声音数据&#xff0c;进行运算得到当前这个音频数据的振幅&#xff0c;类似于分贝…

初始数字孪生

文章目录 概念定义 架构框图 基本要求 功能要求 服务应用 参考文献 概念定义 数字孪生&#xff08;digital twin&#xff09;&#xff0c;是指具有保证物理状态和虚拟状态之间以适当速率和精度同步的数据连接的特定目标实体的数字化表达。 架构框图 数字孪生的整体架构&a…