CDC系列(一)、Canal 集群部署及使用(带WebUI)

canal集群部署及使用 本文主要讲解canal集群部署及使用 阅读详情

目录

前言

准备工作

MySQL开启Binlog

安装Canal Admin WEB UI

安装Canal Server

监控MySQL并导入Kafka

尾巴


前言

CDC(Change Data Capture)是一种捕获数据修改的技术方案,常常应用于异构数据源之间的数据同步。通常有两种解决方案:批式定时根据查询条件采集变更数据、监控数据源的操作日志。对于第一种批式的方案好处是门槛低成本低但坏处是可能会造成数据丢失以及数据有延迟等等,第二种日志方案好处很明显,比如对数据源侵入性低,数据时效性更高,不会有数据丢失的风险等等。在目前的关系型数据库中如MySQL、Oracle、SQLServer、Postgre等都提供了用于同步的日志解决方案,如MySQL基于binlog在主备之间进行同步。

本篇我们介绍的Canal由阿里开源,它将自己伪装成一个MySQL的Slave节点,通过拉取MySQL的binlog来达到实时采集数据库的操作日志的目的,在后面我们就可以将采集到的数据变更操作通过SparkStreaming、FlinkSQL、KafkaConnector等工具进行数据处理和导出到其他异构数据源。

准备工作

需要提前准备好下面几个组件的安装:

  1. JDK1.8:略
  2. MySQL5或8都行:Mysql 8.0.12解压版安装
  3. Kafka:Kafka系列(一)、2.6.0版本kafka集群搭建
  4. zookeeper:Zookeeper系列(三)、zk集群安装部署
  5. 下载Canal Admin 1.1.4版本:https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.admin-1.1.4.tar.gz
  6. 下载Canal Deployer 1.1.4版本:https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz

MySQL开启Binlog

上面也提到,基于日志的CDC方案在MySQL中就是通过binlog来记录的,因此第一步我们先将准备好的MySQL开启binlog,开启binlog的操作也很简单,只需要在my.cnf内加入下面的内容即可:

# 修改mysql配置文件
vim /etc/my.cnf

-----------------------
[mysqld]  
#开启binlog
log-bin=mysql-bin 

#日志记录方式,建议使用ROW模式
binlog-format=ROW 

#给当前mysql一个server id,之后的CDC工具里配置的不能跟这个重复
server_id=1 

开启binlog之后重启mysql服务:

#重复mysql服务
service mysqld restart

#查看mysql服务状态
service mysqld status

进入mysql命令行,使用下面的命令查看binlog开启的情况:

mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.01 sec)

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

由于canal伪装成MySQL的从节点,因此需要在被监控的MySQL上给canal创建一个拥有复制权限的用户:

#创建用户canal,密码canal_pwd
CREATE USER canal IDENTIFIED BY 'canal_pwd';    

#如果创建用户时报错,密码不满足复杂度,可以使用下面的命令修改密码复杂度条件
#查看密码策略
SHOW VARIABLES LIKE 'validate_password%';
#设置密码策略为LOW
set global validate_password_policy=LOW;
#设置密码最短位数
set global validate_password_length=4;

#授予canal用户复制binlog的权限
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';  
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;

#刷新权限
FLUSH PRIVILEGES; 

#查看canal用户的权限
show grants for 'canal' 

安装Canal Admin WEB UI

Canal Admin是一个是为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的Web UI操作界面,方便用户快速和安全的操作,因此我们要先部署Canal admin,首先就要先给该应用一个管理数据库默认为canal_manager,这里我们就在被监控的MySQL实例上创建另一个用户canal_admin以及canal_manager库来作为canal admin的管理数据库(在生产环境中,Canal Admin的管理库和被监控binlog的MySQL一定是不在同一个MySQL实例上)。 

使用root账户进入MySQL命令行执行下面的命令: 

#创建用户canal_admin
CREATE USER canal_admin IDENTIFIED BY 'canal_admin_pwd';    
GRANT ALL PRIVILEGES ON *.* TO 'canal_admin'@'%' ;
FLUSH PRIVILEGES; 

 将下载到的CanalAdmin解压并配置yml文件:

#解压canal admin的tar包
tar -zxvf canal.admin-1.1.4.tar.gz -C /opt/app/canal_admin/

#修改yml配置文件,主要修改canal admin的管理库DBhost和DBusername,DBpassword,最下面的canal admin的用户名和密码并不是canal admin web ui的用户,而是后门canal server和canal admin进行通信时的用户
vim /opt/app/canal_admin/conf/application.yml 
-------------------------------------------------
server:
  port: 8089
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

spring.datasource:
  address: 192.168.142.91:3306
  database: canal_manager
  username: canal_admin
  password: canal_admin_pwd
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false
  hikari:
    maximum-pool-size: 30
    minimum-idle: 1

canal:
  adminUser: admin
  adminPasswd: admin

使用canal_admin用户进入MySQL命令行,执行/opt/app/canal_admin/conf/canal_manager.sql 脚本:

# shell 进入mysql命令行
[root@wyk01 ~]# mysql -ucanal_admin -pcanal_admin_pwd

# mysql 命令行 执行canal_manager.sql脚本
mysql> source /opt/app/canal_admin/conf/canal_manager.sql
Query OK, 1 row affected (0.05 sec)
Database changed
Query OK, 0 rows affected (0.00 sec)
...
...
Query OK, 0 rows affected (0.00 sec)

此时我们就准备好了canal admin服务,使用下面的命令启动:

/opt/app/canal_admin/bin/startup.sh 

在浏览器中输入ip:8089进入canal admin的web管理界面,默认管理员账号为admin/123456:

接下来我们通过canal admin管理界面来配置部署canal单机/集群。

点击操作-->主配置,配置该canal集群的主配置即对应之前canal版本中的canal.properties文件

点击载入模板

主要修改下面这些参数,其他参数默认即可:

# canal admin config
# 这里的密码就是前面在application.yml最后的参数提到的admin/admin,不过这里需要使用mysql加密后的密码,可以在mysql内通过命令 select password('canal') 获取加密串(去掉星号)
canal.admin.manager = 10.1.174.10:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441

canal.zkServers = wyk01:2181,wyk02:2181,wyk03:2181
#canal.instance.global.spring.xml = classpath:spring/file-instance.xml
canal.instance.global.spring.xml = classpath:spring/default-instance.xml

#监控到的binlog输出到kafka
canal.serverMode = kafka
canal.mq.servers = wyk01:9092,wyk02:9092,wyk03:9092

安装Canal Server

接下来安装canal server,在1.1.4之前的版本中没有canal admin管理界面,我们只能通过修改canal.properties文件来给canal配置,有了canal admin之后,每个canal server作为一个分布式节点同享刚才我们创建集群时的主配置,因此在canal server这里只需要配置连接到canal admin的配置即可。

解压下载到的canal deployer,然后修改配置文件:

#解压canal deployer的tar包
tar -zxvf canal.deployer-1.1.4.tar.gz -C /opt/app/canal_server/

#修改配置文件
vim /opt/app/canal_server/conf/canal_local.properties

-------------------------------------------
# register ip
# 每台canal server的ip不一样
canal.register.ip = wyk01

#下面的配置在每台canal server上保持一致
# canal admin config
# 这里的密码就是前面在application.yml最后的参数提到的admin/admin,不过这里需要使用mysql加密后的密码,可以在mysql内通过命令 select password('canal') 获取加密串(去掉星号)
canal.admin.manager = wyk01:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
# admin auto register
# 指向我们创建的mycanal集群
canal.admin.register.auto = true
canal.admin.register.cluster = mycanal
-------------------------------------------

使用下面的命令启动canal server,会自动添加到canal admin的server管理页面:

/opt/app/canal_server/bin/startup.sh local

到这一步,该canal集群里只有一台canal服务,也可以提供服务,不过为了保证HA,我们这里再添加两个canal server节点,将canal_server目录分发到另外两台节点,只需要修改canal_local.properties内的 canal.register.ip参数即可。

#一、wyk01: 将canal server 目录分发到wyk02,wyk03节点
scp -r /opt/app/canal_server root@wyk02:/opt/app/
scp -r /opt/app/canal_server root@wyk03:/opt/app/

#二、wyk02 & wyk03: 修改canal_local.properties配置文件中下面的参数
vim /opt/app/canal_server/conf/canal_local.properties

-------------------------------------------
# wyk02
# register ip
# 每台canal server的ip不一样
canal.register.ip = wyk02

-------------------------------------------
# wyk03
# register ip
# 每台canal server的ip不一样
canal.register.ip = wyk03


#三、wyk02 & wyk03: 重启动canal server
/opt/app/canal_server/bin/stop.sh
/opt/app/canal_server/bin/startup.sh local

重新启动wyk02,wyk03节点的canal server之后,在canal admin的server管理页面点击刷新列表即可看到三个canal server都在同一个canal cluster内了: 

已注册到canal集群的canal server也可以在zookeeper的/otter/canal/cluster节点下看到:

[zk: localhost:2181(CONNECTED) 9] ls /otter/canal/cluster
[wyk01:11111, wyk02:11111, wyk03:11111]

监控MySQL并导入Kafka

我们已经部署好了canal集群,下面终于可以监控mysql的数据修改动作并将该动作导入kafka了,在之前1.1.4版本之前我们要配置instance.properties文件,通过canal admin,我们只需要在界面上载入模板修改对应参数即可应用到每个canal server:

本次测试我们来监控test_csdn这个库下的所有操作,只需要修改下面的参数即可,其他参数可以保持默认:

详细参数请参考官方文档:https://github.com/alibaba/canal/wiki/AdminGuide 

# position info
canal.instance.master.address=wyk01:3306

# username/password
# 这里的用户必须是刚才授权该库的binlog权限的用户
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal_pwd

# table regex
# 配置监控test_csdn库下的所有表,这里的正则可以定制匹配规则,具体可参考官方文档:https://github.com/alibaba/canal/wiki/AdminGuide
canal.instance.filter.regex=test_csdn\\..*

# mq config
# 指定输出到kafka的topic为:wyk_csdn_canal
canal.mq.topic=wyk_csdn_canal

保存然后点击启动instance即可:

我们开启一个kafka的consuer命令行,然后在test_csdn库下做增删改查,验证kafka中有没有接收到CDC数据: 

#开启kafka consumer
bin/kafka-console-consumer.sh --bootstrap-server wyk01:9092,wyk02:9092,wyk03:9092 --topic wyk_csdn_canal
-- 在mysql中造数据
create database test_csdn;
use test_csdn;

-- 建表
create table wyk_csdn(id int,name varchar(20),ins_ts timestamp);

-- 插入2条数据
insert into wyk_csdn values(1,'wyk1',current_timestamp());
insert into wyk_csdn values(2,'wyk2',current_timestamp());

-- 更新id=2的数据
update wyk_csdn set name='wyk2_new' where id=2;

-- 删除id=1的数据
delete from wyk_csdn where id=1;

-- 清空表
truncate table wyk_csdn;

-- 删除表
drop table wyk_csdn;

-- 修改表结构
create table wyk_csdn2(id int,name varchar(20),ins_ts timestamp);
alter table wyk_csdn2 add column(add_c text);

-- 修改表名
rename table wyk_csdn2 to wyk_csdn2_new;

 Canal json数据格式如下:

{
	"data": null,
	"database": "test_csdn",
	"es": 1600756599000,
	"id": 2,
	"isDdl": true,
	"mysqlType": null,
	"old": null,
	"pkNames": null,
	"sql": "create table wyk_csdn(id int,name varchar(20),ins_ts timestamp)",
	"sqlType": null,
	"table": "wyk_csdn",
	"ts": 1600756600261,
	"type": "CREATE"
}
{
	"data": [
		{
			"id": "1",
			"name": "wyk1",
			"ins_ts": "2020-09-22 14:37:19"
		}
	],
	"database": "test_csdn",
	"es": 1600756639000,
	"id": 3,
	"isDdl": false,
	"mysqlType": {
		"id": "int",
		"name": "varchar(20)",
		"ins_ts": "timestamp"
	},
	"old": null,
	"pkNames": null,
	"sql": "",
	"sqlType": {
		"id": 4,
		"name": 12,
		"ins_ts": 93
	},
	"table": "wyk_csdn",
	"ts": 1600756639895,
	"type": "INSERT"
}
{
	"data": [
		{
			"id": "2",
			"name": "wyk2",
			"ins_ts": "2020-09-22 14:37:19"
		}
	],
	"database": "test_csdn",
	"es": 1600756639000,
	"id": 3,
	"isDdl": false,
	"mysqlType": {
		"id": "int",
		"name": "varchar(20)",
		"ins_ts": "timestamp"
	},
	"old": null,
	"pkNames": null,
	"sql": "",
	"sqlType": {
		"id": 4,
		"name": 12,
		"ins_ts": 93
	},
	"table": "wyk_csdn",
	"ts": 1600756639895,
	"type": "INSERT"
}
{
	"data": [
		{
			"id": "2",
			"name": "wyk2_new",
			"ins_ts": "2020-09-22 14:37:48"
		}
	],
	"database": "test_csdn",
	"es": 1600756668000,
	"id": 4,
	"isDdl": false,
	"mysqlType": {
		"id": "int",
		"name": "varchar(20)",
		"ins_ts": "timestamp"
	},
	"old": [
		{
			"name": "wyk2",
			"ins_ts": "2020-09-22 14:37:19"
		}
	],
	"pkNames": null,
	"sql": "",
	"sqlType": {
		"id": 4,
		"name": 12,
		"ins_ts": 93
	},
	"table": "wyk_csdn",
	"ts": 1600756668632,
	"type": "UPDATE"
}
{
	"data": [
		{
			"id": "1",
			"name": "wyk1",
			"ins_ts": "2020-09-22 14:37:19"
		}
	],
	"database": "test_csdn",
	"es": 1600756682000,
	"id": 5,
	"isDdl": false,
	"mysqlType": {
		"id": "int",
		"name": "varchar(20)",
		"ins_ts": "timestamp"
	},
	"old": null,
	"pkNames": null,
	"sql": "",
	"sqlType": {
		"id": 4,
		"name": 12,
		"ins_ts": 93
	},
	"table": "wyk_csdn",
	"ts": 1600756682711,
	"type": "DELETE"
}
{
	"data": null,
	"database": "test_csdn",
	"es": 1600756722000,
	"id": 6,
	"isDdl": true,
	"mysqlType": null,
	"old": null,
	"pkNames": null,
	"sql": "truncate table wyk_csdn",
	"sqlType": null,
	"table": "wyk_csdn",
	"ts": 1600756722959,
	"type": "TRUNCATE"
}
{
	"data": null,
	"database": "test_csdn",
	"es": 1600756727000,
	"id": 7,
	"isDdl": true,
	"mysqlType": null,
	"old": null,
	"pkNames": null,
	"sql": "DROP TABLE `wyk_csdn` /* generated by server */",
	"sqlType": null,
	"table": "wyk_csdn",
	"ts": 1600756728388,
	"type": "ERASE"
}
{
	"data": null,
	"database": "test_csdn",
	"es": 1600757190000,
	"id": 8,
	"isDdl": true,
	"mysqlType": null,
	"old": null,
	"pkNames": null,
	"sql": "create table wyk_csdn2(id int,name varchar(20),ins_ts timestamp)",
	"sqlType": null,
	"table": "wyk_csdn2",
	"ts": 1600757192968,
	"type": "CREATE"
}
{
	"data": null,
	"database": "test_csdn",
	"es": 1600757196000,
	"id": 9,
	"isDdl": true,
	"mysqlType": null,
	"old": null,
	"pkNames": null,
	"sql": "alter table wyk_csdn2 add column(add_c text)",
	"sqlType": null,
	"table": "wyk_csdn2",
	"ts": 1600757201221,
	"type": "ALTER"
}
{
	"data": null,
	"database": "test_csdn",
	"es": 1600758458000,
	"id": 10,
	"isDdl": true,
	"mysqlType": null,
	"old": null,
	"pkNames": null,
	"sql": "rename table wyk_csdn2 to wyk_csdn2_new",
	"sqlType": null,
	"table": "wyk_csdn2_new",
	"ts": 1600758460224,
	"type": "RENAME"
}

尾巴

可以看到,Canal能够监控到数据库的alter table&view /create table&view/insert/update/delete/truncate/drop/rename等动作,已经非常的全面,甚至可以监控truncate动作,CanalAdmin为我们提供了可视化的配置,也给Canal提供了HA解决了单点故障的问题。后面介绍其他CDC工具如Maxwell、Debezium也可以实现类似的功能,区别其实都不大,都是通过监控binlog日志来进行数据变更的捕获,其次就是发出来的json格式不一样,获取这些数据变更动作之后,我们就可以有针对性的对它们进行处理同步到各种异构目标数据源了。

在后面的文章中我会介绍这三种主要的CDC工具的对比以及结合Flink 的使用。

希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!

canal集群部署 配置zookeeper集群地址:canal.instance.global.spring.xml 改为classpath:spring/default-instance.xml。包含inbound(canal server读取binlog的网络带宽)和outbound(canal server返回给canal client的网络带宽)。「canal.instance.filter.regex」 mysql 数据解析关注的表,Perl正则表达式.多个正则之间以逗号(,)分隔,转义符需要双斜杠() 阅读详情

相关推荐

实时采集Canal快速入门

CDC, 实时采集,实时同步,canal,kafka,入门实例

zhang5324496的博客 5579

Canal高可用架构部署

一、前言 canal 是阿里的一款开源项目,纯 Java 开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了 MySQL(也支持 mariaDB)。 canal 模拟 mysql slave 的交互协议,伪装自己为 mysql slave,向 mysql master发送 dump 协议; mysql master 收到 dump 请求,开始推送binary log给 slave(也就是canal) canal 解析 binary log对象(原始为byte流)。 &nbs.

zlt2000的博客 2301

canal-server-web:canal服务端的web版本,支持使用web容器启动

canal-server-web canal服务端的web版本,支持使用web容器启动

canal web管理界面配置

1、下载canal https://github.com/alibaba/canal 2、IDEA 导入项目 3、修改配置文件 4、安装Ebean插件 打开idea, File > Settings > Plugins > "Ebean 11" 来安装插件,如图所示: 5、启动CanalAdmin 6、启动canal-ui 构建项目 npm instll 运行项目 npm run dev ...

ziuwai 的博客 1567

Canal集群化部署.docx

基于日志增量订阅&消费支持的业务 1. 数据库镜像 2. 数据库实时备份 3. 多级索引 (卖家和买家各自分库索引) 4. search build 5. 业务cache刷新 6. 价格变化等重要业务消息

echarts实现3D地图——map3D

【代码】echarts实现3D地图——map3D。

xiaoququ的博客 7316

CDC系列(三)、Debezium 监控MySQL操作日志实时同步到Kafka(对比canal,maxwell)

目录 前言 准备工作 配置Connector 注册启动Connector 验证CDC 尾巴 CDC系列: CDC系列(一)、Canal 集群部署及使用(带WebUI) CDC系列(二)、Maxwell_v1.27.1 监控MySQL操作日志实时同步到Kafka 前言 前两篇我们介绍了CDC工具,以及利用Canal和Maxwell监控mysql操作日志并写入kafka,本篇我们来讲解另一个CDC工具:debezium。debezium不仅仅支持mysql的监控,目前最新版已支持mysql

王义凯 的博客 1万+

检索增强世界模型(R-WoM)原理与应用实践

世界模型是AI系统理解环境的核心技术,通过构建环境的内部表示实现状态预测和行动规划。传统方法基于RNN或VAE等神经网络,而检索增强世界模型(R-WoM)创新性地引入检索机制,结合外部记忆库提升系统性能。这种架构突破模型参数限制,使AI能像人类一样利用历史经验解决问题,在游戏AI、虚拟助手等场景表现优异。关键技术包括FAISS相似性搜索、分层记忆管理和动态检索策略,其中Transformer编码器和GRU动态模型的组合实现高效环境建模。实践表明,该方法可提升47%的战术多样性,加快32%的应急响应速度。

weixin_42676876的博客 341

canal同步数据教程

主要是基于 MySQL 数据库增量日志解析,提供,是一个的方案。基于日志增量订阅和消费的业务包括当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x。

jiandanfeng2的专栏 1285

Emscripten安装(wasm编译)

5:配置对应环境变量--替换成自己对应的安装路径(2025最新的Emscripten工具链默认使用LLVM/WebAssembly标准工作流,java依赖已经移除了,所以以下java环境不配,需要使用java的手动添加即可---->emsdk install java-8-152-64bit。3:下载相应的依赖库---->emsdk install latest(我这里下的是最新的,如果有指定版本,把latest替换成版本号即可)6:测试是否成功---> emcc- v/em++ -v。

qq_31578301的博客 554

Python3实现基于ARIMA模型来预测茅台股票价格趋势

ARIMA(Autoregressive Integrated Moving Average)模型是一种广泛使用的时间序列分析方法,它可以用于对未来的数据进行预测。ARIMA模型由自回归模型(AR模型)、差分整合模型(I模型)和移动平均模型(MA模型)组成,因此也被称为ARIMA(p,d,q)模型。其中,p表示自回归阶数,d表示差分阶数,q表示移动平均阶数。具体来说,ARIMA模型可以通过以下步骤进行建模:数据预处理:对时间序列进行平稳性检验,如果不满足平稳性,则进行差分操作。

m0_64336780的博客 2万+

tiktoken 分词器实战:3-6倍提速,从Token估算到批量编码落地

假设你负责给一条 RAG 链路做成本核算:线上每天要处理几十万条 Prompt,你得先估算它们的 Token 开销和计费量级。逐条调用官方接口来数 Token,延迟和费用都扛不住;换成别的开源分词器,结果又可能和官方 API 对不齐,计费偏差会直接落到真金白银上。[tiktoken](https://link.gitcode.com/i/ac6eda7c62f424543aa86e05da8e85

gitblog_00641的博客 224

YOLOv8改进-bifpn

跨尺度连接通过添加一个跳跃连接和双向路径来实现,自此实现了加权融合和双向跨尺度连接。该结构是加权且双向连接的,即自顶向下和自底向上结构,通过构造双向通道实现跨尺度连接,将特征提取网络中的特征直接与自下而上路径中的相对大小特征融合,保留了更浅的语义信息,而不会丢失太多的深层语义信息。传统的特征融合时将尺度不同的特征图以相同权重进行加权,但是当输入的特征图分辨率不同时,以相同的权重进行加权对输出的特征图不平等。所以BiFPN根据不同输入特征的重要性设置不同的权重,同时反复采用这种结构来加强特征融合。

weixin_45303602的博客 8136

Canal-数据库同步工具-黑马

canal和sqoop的区别: Sqoop: 同步全量数据:能够实现对关系型数据的全量同步,但在很多业务场景下,由于数据量非常非常大,每天全量同步,对于Hadoop的压力较大,因此要慎用。 Canal: 只同步更新的数据:实现基于CDC的数据同步方案,也就是捕获数据源中更新的数据,从而获得增量数据的更新。 Canal介绍 简介 基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger(触发器

紫蝶侠的博客 1556

BPC坏点矫正

whatis the Bad Pixel? 坏点为死点,也就是基本不随照度变化呈现光电线性转换的关系。表现为暗态常亮,亮态常暗。 坏点分类:静态坏点:亮坏点,暗坏点。 动态坏点:在一定像素范围内,该点表现正常,而超过这一范围,该点表现的比周围像素要亮。与sensor ...

camerall 1万+

2024 年 9 月青少年软编等考 C 语言三级真题解析

2024 年 9 月青少年软编等考 C 语言三级真题解析。

发布少儿编程考级的真题和优秀竞赛题解析,以及一些讲义。 1737

java通过canal同步mysql变动数据到redis

canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议,具体可以直接去看官方文档:https://github.com/alibaba/canal ,此处使用tcp协议同步数据到redis 此处使用1.1.4的版本,通过WebUI能力来配置canal 一、需要先安装好java环境与mysql 1,java安装:https://blog.youkuaiyun.com/u012946310/article/details/8197959

H的博客 1672

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SpringBoot集成Flink-CDC实现数据库实时监听

数据库变更捕获(CDC)是构建实时数据管道的核心能力,其本质是通过解析数据库binlog日志,将INSERT/UPDATE/DELETE等操作转化为流式事件。传统方案依赖Canal+Kafka多组件协同,链路长、运维重、延迟高;而Flink-CDC采用‘计算即采集’架构,将Debezium深度嵌入Flink流处理引擎,直接输出结构化ChangeLog Record。结合SpringBoot作为统一应用容器,可实现轻量级部署、生命周期协同与业务逻辑紧耦合,显著降低准实时同步的工程门槛。本文聚焦SpringBo

weixin_33965305的博客 325

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

MySQL 同步 ES 实战

我们再回顾一下整体执行流程:写到这里,就结束了,是不是满满的干货呢?基本是手把手教你如何将 MySQL 同步到 ES,不仅是增量同步,还包括全量同步,如果你的项目也需要用到该场景,基本可以直接照搬。MySQL 同步 ES 实战,肝到爆!

辣香牛肉面的博客 1698

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Flink DataStream Join原理与实战:IntervalJoin、WindowJoin选型与调优

流式JOIN是实时计算的核心操作,其本质并非SQL语法迁移,而是基于事件时间、状态管理和窗口语义的动态协同计算。区别于批处理的静态快照匹配,Flink的DataStream JOIN依赖Watermark驱动、KeyedState持久化和定时器机制,在EventTime与ProcessingTime双模型下保障结果一致性与低延迟。IntervalJoin适用于业务时间偏移约束(如‘订单后5分钟内匹配GPS’),WindowJoin则适配固定周期统计场景;二者在状态结构、清理策略与水位线对齐上存在根本差异。本

weixin_29057237的博客 79

Canal实战使用(集群部署)和原理解析

MySQL master将数据变更写入二进制日志(binary log,其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)配置完成后,先启动服务端(省略zk安装,较为简单可以自己百度),然后启动客户端,新建表添加数据进行测试。canal模拟mysql数据同步的原理,伪装自己为mysql slave,向mysql master发送dump协议。MySQL slave重放relay log中事件,将数据变更反映它自己的数据。

qq_33790251的博客 1943

高可用 Canal集群( 秒懂 + 史上最全)

canal server 仅仅是保姆角色,真正完成 解析 binlog日志、 binlog日志过滤、 binlog日志转储、位点元数据管理等等 核心功能,是由canal instance 角色完成。Canal Instance 的架构图如下图所示:Canal 中数据的同步是由 CanalInstance 组件负责,一个 Canal Server 实例中可以创建多个 CanalInstance 实例。

架构师尼恩 2万+

【canal】canal-web上操作实例 `启动/停止` 失败的解决方法

正确处理canal-admin操作异常问题

yuanling_123的博客 1620

Canal 同步 (集群版)

Canal 阿里云RDS同步到Mysql

sdfsfaf的博客 2044

canal server 标准化集群搭建(一)

安装 maven 包(自动安装到 target 目录下,zkui-2.0-SNAPSHOT-jar-with-dependencies.jar 会被安装)# 第50行修改为instance name,要与上级目录名、canal.properties 中的 intance name 一致。# 修改 instance 配置文件——非必须,可以不修改,因为配置 canal admin 后,该信息是从 admin 获取的。# 访问 canal admin,默认密码:admin/123456。

2301_76957510的博客 2049
上一篇: Kafka系列(五)、开启SASL安全认证以及配置ACL权限控制
下一篇: CDC系列(二)、Maxwell_v1.27.1 监控MySQL操作日志实时同步到Kafka
王义凯_Rick
王义凯_Rick 领域专家: 大数据技术领域 领域专家: 大数据技术领域
博客等级 码龄14年 858粉丝 162原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王义凯_Rick

遇见即是缘,路过就给个评论吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值