canal简单介绍

news2025/1/11 16:02:59

简介

https://github.com/alibaba/canal
基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费

image.png
原理是使用程序模拟一个mysql的从库,使主库发送同步日志给程序,程序再对数据进行处理,比如同步到其他数据库。

使用

下图是一个典型的将mysql增量数据同步到es的流程
image.png
这里要注意的是,canal client不是连接数据库,而是必须连接到canal server上的
canal server: canal 服务端,内部可包含多个canal instance
canal instance: 运行在canal server中, 可被canal client连接
canal client: 集成在业务代码中,可连接canal instacne读取bin-log事件,并进行相应处理

安装canal 服务端

直接使用docker来安装
https://github.com/alibaba/canal/wiki/Docker-QuickStart
下载官方镜像及run.sh文档

docker pull canal/canal-server:latest
wget https://raw.githubusercontent.com/alibaba/canal/master/docker/run.sh

可以根据需要修改一下run.sh时面的一些端口和内存配置,然后编写自己的start.sh脚本

#!/bin/sh
run.sh -e canal.auto.scan=false \
      -e canal.instance.mysql.slaveId=10001 \
      -e canal.zkServers=192.168.1.10:1100 \
        -e canal.instance.global.spring.xml=classpath:spring/default-instance.xml \
                  -e canal.destinations=test \
                  -e canal.instance.master.address=127.0.0.1:3306  \
                  -e canal.instance.dbUsername=canal  \
                  -e canal.instance.dbPassword=canal  \
                  -e canal.instance.connectionCharset=UTF-8 \
                  -e canal.instance.tsdb.enable=true \
                  -e canal.instance.gtidon=false  \
                  -e canal.instance.filter.regex=.*\\..*

canal服务端配置说明:
https://github.com/alibaba/canal/wiki/AdminGuide
canal.destinations:实例列表
canal.instance.master.address: 源数据库地址
canal.instance.dbUsername:源数据库用户名
canal.instance.dbPassword: 源数据库密码
canal.instance.connectionCharset: 数据库连接字符集
canal.instance.filter.regex:需要处理的表(Perl正则表达式),多个规则使用’,'分隔

线上是使用阿云数据库,阿里云binlog是默认开启的,本地保留时间为18小时,一般来说够用了,不够的话就要去配置保存到oss了。https://github.com/alibaba/canal/wiki/aliyun-RDS-QuickStart

集成客户端

导入库

    compile('com.alibaba.otter:canal.client:1.1.6') {
        exclude group: 'org.slf4j'
        exclude group: 'ch.qos.logback'
    }
    compile('com.alibaba.otter:canal.protocol:1.1.6') {
        exclude group: 'org.slf4j'
        exclude group: 'ch.qos.logback'
    }

代码示例

//创建连接
CanalConnector connector = CanalConnectors.newClusterConnector("192.168.1.10:1100", "test", "", "");
//连接服务端
connector.connect();
connector.subscribe();
//循环获取事件
while (running) {
    Message message = connector.getWithoutAck(batchSize); // 获取指定数量的数据
    long batchId = message.getId();
    int size = message.getEntries().size();
    if (batchId == -1 || size == 0) {
	//无数据时睡眠一会
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
        }
    } else {
	//开始处理数据
        for (CanalEntry.Entry entry : message.getEntries()) {
            switch (entry.getEntryType()) {
                case TRANSACTIONBEGIN:
                    processTransactionBegin(entry);
                    break;
                case ROWDATA:
                    processRawDataEntry(entry);
                    break;
                case TRANSACTIONEND:
                    processTransactionEnd(entry);
                    break;
            }
        }
    }

    if (batchId != -1) {
        connector.ack(batchId); // 提交确认
    }
}

值得注意的是,canal事件包含事务开始,数据,事务结束等,一般来说一个事务会在一个message中返回,但也有可能在多个message中,这个和batchSize、服务端缓冲区大小有关系。
一个message中只会包含一个事务。
在没有提交事务之前,binlog不会同步给从服务器,所以canal收到的事件都是提交之后的。

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

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

相关文章

【计算机网络】图解路由器(一)

图解路由器(一) 1、什么是路由器?2、什么是路由选择?3、什么是转发?4、路由器设备有哪些类型?5、根据性能分类,路由器有哪些类型?5.1 高端路由器5.2 中端路由器5.3 低端路由器 6、什…

Dubbo面试题(三)

文章目录 前言一、Dubbo 的注册中心集群挂掉,发布者和订阅者之间还能通信么?二、Dubbo和Spring的关系三、Dubbo 使用的是什么通信框架?四、Dubbo 集群提供了哪些负载均衡策略?五、Dubbo 的集群容错方案有哪些?六、Dubbo 的默认集…

33.CSS发光按钮的悬停效果

特效 源码 indexhtml <!DOCTYPE html> <html> <head><title>CSS Modern Button</title><link rel="stylesheet" type="text/css" href="style.css"> </head> <body><a href="#"…

【数据结构练习】链表面试题集锦二

目录 前言&#xff1a; 1.链表分割 2.相交链表 3.环形链表 4.环形链表 II 前言&#xff1a; 数据结构想要学的好&#xff0c;刷题少不了&#xff0c;我们不仅要多刷题&#xff0c;还要刷好题&#xff01;为此我开启了一个必做好题锦集的系列&#xff0c;每篇大约5题左右。此…

大数据Flink(八十五):Window TVF 支持多维数据分析

文章目录 Window TVF 支持多维数据分析 一、Grouping Sets 二、​​​​​​​Rollup

学习记忆——宫殿篇——记忆宫殿——记忆桩——风景

河边街道窗框空间房顶楼房水塔山顶塔桥舟桥楼观景台 车顶架碧水池&#xff08;喷泉&#xff09;塔腰楼顶房檐碑石狮箱车叉牌摩托灯

Qt5开发及实例V2.0-第十二章-Qt多线程

Qt5开发及实例V2.0-第十二章-Qt多线程 第12章 Qt 5多线程12.1 多线程及简单实例12.2 多线程控制12.2.1 互斥量12.2.2 信号量12.2.3 线程等待与唤醒 12.3 多线程应用12.3.1 【实例】&#xff1a;服务器编程12.3.2 【实例】&#xff1a;客户端编程 本章相关例程源码下载1.Qt5开发…

Qt5开发及实例V2.0-第十三章-Qt数据库

Qt5开发及实例V2.0-第十三章-Qt数据库 第13章 Qt 5数据库13.1 数据库基本概念13.2 常用SQL命令13.2.1 数据查询13.2.2 数据操作 13.3 Qt操作数据库及实例13.3.1 Qt操作SQLite数据库13.3.2 Qt操作主/从视图及XML 本章相关例程源码下载1.Qt5开发及实例_CH1301.rar 下载2.Qt5开发及…

GLTF编辑器:在线模型材质编辑工具

GLTF 编辑器 是一个功能强大、易于使用的在线3D模型编辑和查看工具&#xff0c;它支持多种格式的3D模型导入并将模型导出为GLB格式&#xff0c;除了可以对3D模型进行基本属性的修改之外&#xff0c;还支持对模型原点重置以及模型材质纹理修改。对于3D开发者和设计师来说&#x…

基于FPGA的图像白平衡算法实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 202…

数据治理-EDRM电子取证

EDRM是电子取证标准和指南的组织,该框架提供了一种电子取证的方法,对于涉及确定相关内部数据的存储方式和位置、适用什么保留策略、哪些数据不可访问以及哪些工具可用于协助识别流程的人员来说,这种方法非常方便。 EDRM模型假定数据或信息治理已到位。该模型包括8个…

20230918使用ffmpeg将mka的音频转为AAC编码以便PR2023来识别

20230918使用ffmpeg将mka的音频转为AAC编码以便PR2023来识别 2023/9/18 20:58 ffmpeg -i 1.mka -acodec aac 1.mp4 ffmpeg -i 1.mka -vn -c:a aac 2.aac ffmpeg -i 1.mka -vn -c:a aac 2.MP4 ffmpeg mka 转 aacmp4 https://avmedia.0voice.com/?id42526 用ffmpeg将mka格式转化…

flink集群与资源@k8s源码分析-flink kubeclient

flink kubeclient是面向flink应用的fabric8 kubeclient的封装,本文分析flink如何封装kubeclient,核心组件是装饰器,资源和ServiceType,下面通过分析业务创建作业管理器组件(createJobManagerComponent)了解flink kubeclient 1 场景 2 新建作业管理器组件 1. KubernetesJob…

【Java 基础篇】Java同步方法解决数据安全

多线程编程是现代应用程序开发中的常见需求&#xff0c;它可以提高程序的性能和响应能力。然而&#xff0c;多线程编程也带来了一个严重的问题&#xff1a;数据安全。在多线程环境下&#xff0c;多个线程同时访问和修改共享的数据可能导致数据不一致或损坏。为了解决这个问题&a…

一次ES检索的性能优化经验记录

优化功能: 统一检索能力&#xff0c;为各服务所调用。 该接口并发压力大&#xff0c;压测效果不理想。 初步2k线程两台压测机预发环境压测结果两pod下为400qps左右&#xff0c;单pod 平均qps200&#xff0c;响应时间在五分钟之后达到了峰值&#xff0c;平响达到几十秒开外。 压…

万里牛与金蝶云星空对接集成查询调拨单连通调拨单新增(万里牛调拨单-金蝶【直接调拨单】)

万里牛与金蝶云星空对接集成查询调拨单连通调拨单新增(万里牛调拨单-金蝶【直接调拨单】) 源系统:万里牛 万里牛是杭州湖畔网络技术有限公司旗下SaaS软件品牌&#xff0c;主要针对电商、外贸、实体门店等业务群体&#xff0c;帮助企业快速布局新零售&#xff0c;提升订单处理效…

Appium - python

一、appium的介绍 Appium是一款开源的自动化测试工具&#xff0c;其支持iOS和安卓平台上的原生的&#xff0c;基于移动浏览器的&#xff0c;混合 的应用。Appium在不同平台中使用了标准的自动化APIs&#xff0c;所以在跨平台时&#xff0c;不需要重新编译或者修改 自己的应用。…

数学建模——统计回归模型

一、基本知识 1、基本统计量 总体&#xff1a;研究对象的某个感兴趣的指标。样本&#xff1a;从总体中随机抽取的独立个体X1,X2,…,Xn&#xff0c;一般称(X1,…,Xn)为一个样本&#xff0c;可以看成一个n维随机向量&#xff0c;它的每一取组值(x1,…,xn)称为样本的观测值。统计…

说说hashCode() 和 equals() 之间的关系?

每天一道面试题&#xff0c;陪你突击金九银十&#xff01; 上一篇关于介绍Object类下的几种方法时面试题时&#xff0c;提到equals()和hashCode()方法可能引出关于“hashCode() 和 equals() 之间的关系&#xff1f;”的面试题&#xff0c;本篇来解析一下这道基础面试题。 先祭一…

四川玖璨电子商务有限公司培训可靠吗?

四川玖璨电子商务有限公司是一家在抖音平台上进行培训的电商公司。如今&#xff0c;随着抖音带货的火热&#xff0c;越来越多的人加入到这个行业中。然而&#xff0c;对于消费者来说&#xff0c;选择一个可靠的抖音培训公司并不容易。 在这个领域中&#xff0c;四川玖璨电子商务…