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

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.mzph.cn/news/594651.shtml

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

相关文章

FreeRTOS——计数型信号量知识总结及实战

1计数型信号量概念 1)计数型信号量相当于队列长度大于1 的队列,因此计数型信号量能够容纳多个资源 2)适用场景: 事件计数: 当每次事件发生后,在事件处理函数中释放计数型信号量(计数值1&#x…

【C语言】汉诺塔问题/数据结构经典问题/详细总结讲解

1. 前言 汉诺塔问题是一个经典的递归问题,源于印度的一个古老传说。这个问题的特点是其独特的解决方式,需要将一堆盘子从一个柱子移动到另一个柱子,每次只能移动一个盘子,并且不能将一个较大的盘子放在较小的盘子上面。这个问题的…

在Docker中安装Tomact

目录 前言: 一.安装Tomact 查找指定的tomact版本 下载tomact9.0 查看该镜像是否安装成功 安装成功之后就开始运行镜像了 ps(用于列出正在运行的Docker容器) ​编辑 测试(虚拟机ip:8080) ​编辑 解决措施 ​编辑 完成以上步骤&…

如何将本文中的表情符号,使用正则表达式pattern,匹配并替换

如下面的文本: xxxxx \uD83E\uDD1F xxxxx 🤟 xxxxx \uD83E\uDD1Fxxxxx 🤟如何替换这些特殊的unicode呢? 我们先学习下常见的正则: 基本的 Unicode 属性分类 \p{L}|\p{Letter} 字母 \p{M}|\p{Mark

LabVIEW在高精度机器人视觉定位系统中的应用

在现代工业自动化中,精确的机器人视觉定位系统对于提高生产效率和产品质量至关重要。LabVIEW软件,以其卓越的图像处理和自动化控制功能,在这一领域发挥着重要作用。本案例将展示LabVIEW如何帮助开发和实现一个高精度的机器人视觉定位系统&…

有什么安全处理方案可以有效防护恶意爬虫

常见的爬虫 有百度爬虫、谷歌爬虫、必应爬虫等搜索引擎类爬虫,此类爬虫经常被企业用于提高站点在搜索引擎内的自然排名,使得站点在各大搜索引擎中的排名能够提高,进一步通过搜索引擎来进行引流为企业增加业务流量。 恶意爬虫与合法、合规的搜…

Web自动化测试框架总结

实施过了web系统的UI自动化,回顾梳理下,想到什么写什么,随时补充。 首先,自动化测试不是手动测试的替代品,是比较好的补充,而且不是占大比重的补充。 70%的测试工作集中在底层接口测试和单元测试&#xff0…

多元统计分析(4):判别分析

4.1 判别分析的目标 主要目的:判别一个个体所属类别 4.2 距离判别 都选用用马氏距离 4.2.1 判别准则 化简的证明: 称为判别函数,为判别系数。 4.2.2 误判概率 【1】当两个正态总体的协方差相同 证明: 当两个正态总体重合的时…

uniapp中组件库丰富的Switch 开关选择器使用方法

目录 #平台差异说明 #基础使用 #加载中 #禁用switch #自定义尺寸 #自定义颜色 #自定义样式 #异步控制 API #Switch Props #Switch Event 选择开关用于在打开和关闭状态之间进行切换。 #平台差异说明 App(vue)App(nvue&#xff0…

学生公寓安全用电管理系统应用案例

摘要:安全用电是学校公寓用电管理的首要任务,这就需要对一些恶性负载进行识别和控制,同时为了减少电工和后期管理人员的成本,引进了安全用电管理系统。本文在在描述了安全用电管理系统的工作原理和利用智能电表可实现的功能后,阐明…

数字信号处理期末复习——基础知识汇总(三)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…

基于ssm的小儿肺炎知识管理系统设计与实现+vue论文

小儿肺炎知识管理系统设计与实现 摘要 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。传统的信息管理模式,采用人工登记的方式保存相关数据,这种以人力为主的管理模式…

单机多进程,每个进程多张卡 mpi nccl 程序设计检验

做了部分注释&#xff0c;比较乱 本示例结构&#xff1a; 1&#xff0c;源代码 #include <stdlib.h> #include <stdio.h> #include "cuda_runtime.h" #include "nccl.h" #include "mpi.h" #include <unistd.h> #include <…

网络安全—模拟IP代理隐藏身份

文章目录 网络拓扑安装使用代理服务器设置隐藏者设置 使用古老的ccproxy实现代理服务器&#xff0c;仅做实验用途&#xff0c;禁止做违法犯罪的事情&#xff0c;后果自负。 网络拓扑 均使用Windows Server 2003系统 Router 外网IP&#xff1a;使用NAT模式 IP DHCP自动分配或者…

【零基础入门TypeScript】TypeScript - 运算符

目录 ​编辑 什么是操作员&#xff1f; 算术运算符 关系运算符 逻辑运算符 按位运算符 赋值运算符 杂项运算符 否定运算符 (-) 字符串运算符&#xff1a;连接运算符 () 条件运算符 (?) 类型运算符 类型运算符 实例化 什么是操作员&#xff1f; 运算符定义将对数…

【Echarts实践案例】如何在线图上标记一个非轴线上的点

需求背景&#xff1a; 当前有一个趋势图&#xff0c;横坐标表示灯泡平均使用时长&#xff0c;纵坐标表示灯泡平均使用温度。现在需要在当前坐标系下标记一个正在使用中的灯泡的时长及温度&#xff08;趋势图表示的是计算出的平均温度&#xff0c;所以当前灯泡的温度可能不会在…

HCIA-Datacom题库(自己整理分类的)_02_网络设备基础多选【14道题】

注&#xff1a;红色题目是答案有争议。 1.以下哪些MAC地址不能作为主机网卡的MAC地址&#xff1f; 00-02-03-04-05-06 02-03-04-05-06-07 01-02-03-04-05-06 03-04-05-06-07-08 解析&#xff1a;MAC地址的第二位必须是偶数。 2.堆叠&#xff0c;集群技术有以下哪些优势&…

聚醚胺市场分析:预计到2025年将达到10亿美元

聚醚胺是一种有机化合物&#xff0c;在涂料、胶粘剂、树脂等多种行业中用作固化剂、缓蚀剂和燃料添加剂。由于对广泛用于建筑和汽车行业的聚脲涂料的需求不断增加&#xff0c;全球聚醚胺市场一直在经历显着增长。 全球市场分析&#xff1a; 2020 年全球聚醚胺市场价值为 6.2 亿…

python django 个人记账管理系统

python django 个人记账管理系统。 功能&#xff1a;登录&#xff0c;新用户注册&#xff0c;个人信息修改&#xff0c;收入&#xff0c;支出记录&#xff0c;收入记账管理&#xff0c;支出记账管理&#xff0c;收入&#xff0c;支出统计 技术&#xff1a;python django&…

分布式(5)

目录 22.什么是Paxos算法&#xff1f;如何实现&#xff1f; 24.全局唯一ID有哪些实现方案&#xff1f; 25.数据库方式实现方案&#xff1f;有什么缺陷&#xff1f; 22.什么是Paxos算法&#xff1f;如何实现&#xff1f; Paxos算法是Lamport宗师提出的一种基于消息传递的分布…