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

Debezium实现大数据变更状态捕获 1、简介 Debezium是用于捕获变更数据的开源分布式平台。可以响应数据库的所有插入,更新和删除操作。Debezium依赖于kafka上,所以在安装Debezium时需要提前安装好Zookeeper,Kafka,以及Kakfa Connect,可以处理的数据源有很多,包括关系型数据库如MySQL,Oracle,SQL Server等,NoSQL数据如MongoDB,Cassandra等,是一个优秀的CDC工具。 类似框架还有阿里Canal,也支持与消息中间件处理大数据响应的处理手段,学习路径可参考我的 阅读详情
AI摘要

本文介绍如何使用 Debezium 监控 MySQL 操作日志,并实时同步到 Kafka 中。涵盖 Debezium 的安装配置、通过 Kafka Connect 启动 MySQL Connector 的步骤,以及如何验证 CDC 功能。

目录

前言

准备工作

配置Connector

注册启动Connector

验证CDC

尾巴


CDC系列:

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

CDC系列(二)、Maxwell_v1.27.1 监控MySQL操作日志实时同步到Kafka


前言

前两篇我们介绍了CDC工具,以及利用Canal和Maxwell监控mysql操作日志并写入kafka,本篇我们来讲解另一个CDC工具:debezium。debezium不仅仅支持mysql的监控,目前最新版已支持mysql,postgre,mongodb,oracle,sqlserver,db2,cassandra等,它依赖于kafka connect 服务,通过kafka connect,我们可以很方便的将debezium采集到的数据库日志输出到各类目标端。

本篇我们演示如何利用kafka connect启动debezium mysql connector监控mysql 数据库操作日志并写入kafka内

准备工作

上面提到debezium依赖于kafka connect ,而且kafka connect是在0.9版本之后才由confluent团队贡献出来,因此我们必须要先安装好kafka0.9+版本,如果没有的话也可以参考我之前的文章:

由于我们要监控mysql的binlog,因此还需要一个可以访问mysql binlog权限的用户,这个操作在前面两篇有介绍就不在此赘述了。

配置Connector

1. 下载,到官方网址下载最新1.2 版debezium-mysql-connector:Debezium Release Series 1.2

2. 配置kafka connect服务

1. 在kafka目录下新建一个文件夹
mkdir /opt/app/lib_conn

2. 将下载的debezium插件上传至服务器并解压至刚才创建的目录
tar -zxvf debezium-connector-mysql-1.2.5.Final-plugin.tar.gz -C /opt/app/lib_conn

3. 修改kafka connect 配置文件
vim /opt/app/kafka/connect-standalone.properties
#----------------------
#修改下面的几个参数,其他的不变
bootstrap.servers=wykd:9092
plugin.path=/opt/app/kafka_2.11-2.4.1/lib_conn  #指向刚才放置debezium插件的目录

#这两个参数表示connect消息格式,可选json或avro,在消费的时候也需要使用对应的格式,本次我们使用json格式
key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter

3. 配置debezium mysql connector

创建debezium mysql connector插件配置文件,核心参数如下,其他参数请参考官方手册:mysql-connector-configuration-properties_debezium

#修改kafka connect 配置文件
vim /opt/app/kafka/connect-debezium-mysql-wyk-csdn.properties
#----------------------
name=wyk_csdn_mysql_debezium_connector    #connector 名称,唯一
connector.class=io.debezium.connector.mysql.MySqlConnector  #connector 插件
database.hostname=wykd        #数据库host
database.port=3306            #数据库port
database.user=root            #数据库user 有复制binlog权限
database.password=123456      #数据库password
database.server.id=9999       # server id 同一个数据库的serverId不能有重复的
database.server.name=wyk_sandbox    # server name [记录DDL动作的topic名称,给消费端使用的]
database.whitelist=testschema       # schema白名单,只监控白名单库下的,和blacklist参数互相冲突
database.history.kafka.bootstrap.servers=wykd:9092  # kafka
database.history.kafka.topic=wyk_csdn_debezium_mysql  #记录所有schema变动记录的topic[给连接器使用的]
include.schema.changes=true  # 监控schema变动,写入一个名称和server name一样的topic内
include.query=true        # 将执行的sql也记录下来,需要mysql端的参数binlog_rows_query_log_events=ON

注意:

配置文件中每行参数前后不能有空格;

如果需要在消息内记录执行的sql,需要:

  • mysql:set global binlog_rows_query_log_events=ON;
  • debezium mysql connect配置文件:include.query=true

需要特别关注的几个参数:whitelist、blacklist、include.query、include.schema.changes、snapshot.mode

注册启动Connector

如果当前kafka没有启动kafka connect服务,则使用下面的命令启动并注册connect到kafka:

cd $KAFKA_HOME
bin/connect-standalone.sh config/connect-standalone.properties config/connect-debezium-mysql-wyk-csdn2.properties

启动成功后,会一并启动kafka rest服务,我们可以使用restful api的方式查看或管理connectors:

GET /Connectors:返回活跃的 Connector 列表
POST /Connectors:创建一个新的 Connector;请求的主体是一个包含字符串name字段和对象 config 字段(Connector 的配置参数)的 JSON 对象。
GET /Connectors/{name}:获取指定 Connector 的信息
GET /Connectors/{name}/config:获取指定 Connector 的配置参数
PUT /Connectors/{name}/config:更新指定 Connector 的配置参数
GET /Connectors/{name}/status:获取 Connector 的当前状态,包括它是否正在运行,失败,暂停等。
GET /Connectors/{name}/tasks:获取当前正在运行的 Connector 的任务列表。
GET /Connectors/{name}/tasks/{taskid}/status:获取任务的当前状态,包括是否是运行中的,失败的,暂停的等,
PUT /Connectors/{name}/pause:暂停连接器和它的任务,停止消息处理,直到 Connector 恢复。
PUT /Connectors/{name}/resume:恢复暂停的 Connector(如果 Connector 没有暂停,则什么都不做)
POST /Connectors/{name}/restart:重启 Connector(Connector 已故障)
POST /Connectors/{name}/tasks/{taskId}/restart:重启单个任务 (通常这个任务已失败)
DELETE /Connectors/{name}:删除 Connector, 停止所有的任务并删除其配置

在浏览器查看当前活跃的connectors: ip:8083/connectors

例:此时我们想再注册一个debezium mysql connector服务的话就不能用刚刚的命令启动了,会报错提示Failed to bind to 0.0.0.0/0.0.0.0:8083,Caused by: java.net.BindException: Address already in use。这里的8083端口就是kafka connect服务,因此我们只能使用下面的命令来注册新的connector:

# 这里的 connector 配置需要使用json格式
curl -s http://10.1.174.10:8083/connectors -X POST -H "Content-Type: application/json" --data \
'{"name": "wyk_csdn_mysql_debezium_connector2","config": {"connector.class": "io.debezium.connector.mysql.MySqlConnector", "database.hostname": "10.1.174.10", "database.port": "3306", "database.user": "root", "database.password": "123456", "database.server.id": "9988", "database.server.name": "wyk_sandbox", "database.whitelist": "canal_manager", "database.history.kafka.bootstrap.servers": "10.1.174.10:9092 ", "database.history.kafka.topic": "wyk_csdn_debezium_mysql2", "include.schema.changes": "true","include.query":"true" }}'

例:使用rest api管理kafka connectors:

# 查看所有活跃的connectors
curl -s http://10.1.174.10:8083/connectors -X GET

# 注册一个新的connector
curl -s http://10.1.174.10:8083/connectors -X POST -H "Content-Type: application/json" --data \
'{"name": "wyk_csdn_mysql_debezium_connector2","config": {"connector.class": "io.debezium.connector.mysql.MySqlConnector", "database.hostname": "10.1.174.10", "database.port": "3306", "database.user": "root", "database.password": "123456", "database.server.id": "9988", "database.server.name": "wyk_sandbox", "database.whitelist": "canal_manager", "database.history.kafka.bootstrap.servers": "10.1.174.10:9092 ", "database.history.kafka.topic": "wyk_csdn_debezium_mysql", "include.schema.changes": "true","include.query":"true" }}'

# 删除指定的connector
curl -s http://10.1.174.10:8083/connectors/wyk_csdn_mysql_debezium_connector2 -X DELETE

验证CDC

此时我们已经启动了debezium mysql connect来监控指定的mysql并将数据写入了kafka,和maxwell,canal不同的是,debezium监控的消息会将每张表对应一个topic,且该topic只包含该表的增删改(insert/delete/update)操作,DDL操作如create/drop/truncate/rename/alter等命令会统一写入以配置文件中的database.server.name 参数的值为名称的topic内。

Topic 命名方式:对于同一个connector 监控的数据范围,一张表对应一个topic,该范围内所有库所有表的DDL操作记录在同一个topic内:

  • DDL topic:serverName
  • DML topic:serverName.databaseName.tableName

默认情况下,为了提升性能及保证数据一致性,在第一次启动时并不会从binlog回放表的每个操作来同步数据,而是通过一个全局读锁将表的快照直接同步到对应的topic内,这个过程很快,在同步完成后才会继续监控binlog内的操作达到初始化时全量切实时的目的。该快照模式的参数在connector配置文件中为 snapshot.mode,有下面几个可选的值:

  • initial:默认值,第一次启动connector时同步数据快照,完成后再从记录的binlog位置开始同步,但当关闭connector很久以后再次启动时若上次记录的Offset在binlog内已经被删除的时候就会启动失败(建议mysql保留全部binlog);
  • when_needed:在有必要的任何时候执行快照任务,和initial类似,不同的是当遇到故障时如binlog丢失时会重新发起一个快照同步;
  • never:永不执行快照同步,从Binlog记录的位置回放;
  • schema_only:从第一次启动后记录当前schema,然后从binlog位置开始同步,仅同步schema变动而不同步数据;
  • schema_only_recovery:仅同步schema变更而不同步数据,只能配置于已有的connector之上,不是从当前启动时记录schema而是从已存在的connector上次记录的位置开始;

消息体: 分为两种,一个记录DDL,一个记录DML

DDL:schema_change_topic_structure

DML:change_event_values ,默认会使用primary key 或unique key作为消息体的key,也可自定义key。

DML中insert对应的op为c,update对应为u,delete对应为d。 

例:

DDL:

{
	"schema": {
		"type": "struct",
		"fields": [
			{
				"type": "struct",
				"fields": [
					{
						"type": "string",
						"optional": false,
						"field": "version"
					},
					{
						"type": "string",
						"optional": false,
						"field": "connector"
					},
					{
						"type": "string",
						"optional": false,
						"field": "name"
					},
					{
						"type": "int64",
						"optional": false,
						"field": "ts_ms"
					},
					{
						"type": "string",
						"optional": true,
						"name": "io.debezium.data.Enum",
						"version": 1,
						"parameters": {
							"allowed": "true,last,false"
						},
						"default": "false",
						"field": "snapshot"
					},
					{
						"type": "string",
						"optional": false,
						"field": "db"
					},
					{
						"type": "string",
						"optional": true,
						"field": "table"
					},
					{
						"type": "int64",
						"optional": false,
						"field": "server_id"
					},
					{
						"type": "string",
						"optional": true,
						"field": "gtid"
					},
					{
						"type": "string",
						"optional": false,
						"field": "file"
					},
					{
						"type": "int64",
						"optional": false,
						"field": "pos"
					},
					{
						"type": "int32",
						"optional": false,
						"field": "row"
					},
					{
						"type": "int64",
						"optional": true,
						"field": "thread"
					},
					{
						"type": "string",
						"optional": true,
						"field": "query"
					}
				],
				"optional": false,
				"name": "io.debezium.connector.mysql.Source",
				"field": "source"
			},
			{
				"type": "string",
				"optional": false,
				"field": "databaseName"
			},
			{
				"type": "string",
				"optional": false,
				"field": "ddl"
			}
		],
		"optional": false,
		"name": "io.debezium.connector.mysql.SchemaChangeValue"
	},
	"payload": {
		"source": {
			"version": "1.2.2.Final",
			"connector": "mysql",
			"name": "wyk_sandbox",
			"ts_ms": 1601016725000,
			"snapshot": "false",
			"db": "testschema",
			"table": "wyk_csdn",
			"server_id": 1,
			"gtid": null,
			"file": "mysql-bin.000016",
			"pos": 93212,
			"row": 0,
			"thread": null,
			"query": null
		},
		"databaseName": "testschema",
		"ddl": "create table wyk_csdn(id int,name varchar(20),ins_ts timestamp)"
	}
}

DML:

{
	"schema": {
		"type": "struct",
		"fields": [
			{
				"type": "struct",
				"fields": [
					{
						"type": "int32",
						"optional": true,
						"field": "id"
					},
					{
						"type": "string",
						"optional": true,
						"field": "name"
					},
					{
						"type": "string",
						"optional": true,
						"name": "io.debezium.time.ZonedTimestamp",
						"version": 1,
						"field": "ins_ts"
					}
				],
				"optional": true,
				"name": "wyk_sandbox.testschema.wyk_csdn.Value",
				"field": "before"
			},
			{
				"type": "struct",
				"fields": [
					{
						"type": "int32",
						"optional": true,
						"field": "id"
					},
					{
						"type": "string",
						"optional": true,
						"field": "name"
					},
					{
						"type": "string",
						"optional": true,
						"name": "io.debezium.time.ZonedTimestamp",
						"version": 1,
						"field": "ins_ts"
					}
				],
				"optional": true,
				"name": "wyk_sandbox.testschema.wyk_csdn.Value",
				"field": "after"
			},
			{
				"type": "struct",
				"fields": [
					{
						"type": "string",
						"optional": false,
						"field": "version"
					},
					{
						"type": "string",
						"optional": false,
						"field": "connector"
					},
					{
						"type": "string",
						"optional": false,
						"field": "name"
					},
					{
						"type": "int64",
						"optional": false,
						"field": "ts_ms"
					},
					{
						"type": "string",
						"optional": true,
						"name": "io.debezium.data.Enum",
						"version": 1,
						"parameters": {
							"allowed": "true,last,false"
						},
						"default": "false",
						"field": "snapshot"
					},
					{
						"type": "string",
						"optional": false,
						"field": "db"
					},
					{
						"type": "string",
						"optional": true,
						"field": "table"
					},
					{
						"type": "int64",
						"optional": false,
						"field": "server_id"
					},
					{
						"type": "string",
						"optional": true,
						"field": "gtid"
					},
					{
						"type": "string",
						"optional": false,
						"field": "file"
					},
					{
						"type": "int64",
						"optional": false,
						"field": "pos"
					},
					{
						"type": "int32",
						"optional": false,
						"field": "row"
					},
					{
						"type": "int64",
						"optional": true,
						"field": "thread"
					},
					{
						"type": "string",
						"optional": true,
						"field": "query"
					}
				],
				"optional": false,
				"name": "io.debezium.connector.mysql.Source",
				"field": "source"
			},
			{
				"type": "string",
				"optional": false,
				"field": "op"
			},
			{
				"type": "int64",
				"optional": true,
				"field": "ts_ms"
			},
			{
				"type": "struct",
				"fields": [
					{
						"type": "string",
						"optional": false,
						"field": "id"
					},
					{
						"type": "int64",
						"optional": false,
						"field": "total_order"
					},
					{
						"type": "int64",
						"optional": false,
						"field": "data_collection_order"
					}
				],
				"optional": true,
				"field": "transaction"
			}
		],
		"optional": false,
		"name": "wyk_sandbox.testschema.wyk_csdn.Envelope"
	},
	"payload": {
		"before": null,
		"after": {
			"id": 2,
			"name": "wyk2",
			"ins_ts": "2020-09-25T08:10:22Z"
		},
		"source": {
			"version": "1.2.2.Final",
			"connector": "mysql",
			"name": "wyk_sandbox",
			"ts_ms": 1601021422000,
			"snapshot": "false",
			"db": "testschema",
			"table": "wyk_csdn",
			"server_id": 1,
			"gtid": null,
			"file": "mysql-bin.000016",
			"pos": 97798,
			"row": 0,
			"thread": 162,
			"query": "insert into wyk_csdn values(2,'wyk2',current_timestamp())"
		},
		"op": "c",
		"ts_ms": 1601021422679,
		"transaction": null
	}
}

另外如果使用confluent platform,可以在control center中直接查看管理connectors以及查看topic内的数据:

尾巴

优点: 

  1. debezium支持全DDL(create/alter/rename/drop/truncate)和DML(insert/update/delete)的操作日志同步;(Maxwell不支持truncate命令同步)
  2. 支持使用数据的主键或唯一键作为消息体的key(可以根据该唯一键做Topic分区进行负载均衡);
  3. 支持快照模式(snapshot.mode)全量同步;(Canal不支持全量,Maxwell支持bootstrap全量)
  4. 还支持多种数据源(MySQL,Oracle,Postgre,MongoDB,SqlServer,DB2,Cassandra),比Canal,Maxwell功能更强大;
  5. 社区活跃,与kafka connect配合使用如虎添翼。

缺点:

  1. 需要kafka connect依赖;
  2. 消息体内容太多,对消息队列压力较大;(可使用transforms 模块进行压缩和定制)
  3. 每张表对应一个topic,管理起来不够方便(canal,maxwell则可以使用正则来处理); (可使用transforms 模块进行压缩和定制)

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

基于Debezium与Kafka实现MySQL数据库实时变更监听实战指南 变更数据捕获(CDC)是一种通过解析数据库事务日志(如MySQL的binlog)来实时捕获数据增删改操作的技术。其核心原理是监听数据库的二进制日志流,将数据变更作为事件流发布,实现低延迟、高可靠的数据同步。CDC的技术价值在于彻底解耦数据生产与消费,避免了传统轮询查询带来的性能损耗与延迟问题,为构建实时数据管道提供了基础。在应用场景上,CDC广泛应用于电商库存实时更新、多系统数据同步、实时分析报表生成等领域。本文以Debezium和Kafka为核心,详细演示如何构建一个生产级的MySQL数据库监听管道,涵盖 阅读详情

相关推荐

轻量级CDC方案实战:从Debezium到Flink CDC与SeaTunnel

数据实时同步与增量处理是后端和数仓工程师绕不开的工程场景。变更数据捕获(CDC)作为核心机制,通过解析数据库日志(如binlog)将增删改操作转化为可消费事件,驱动缓存更新、数仓同步、事件通知等下游动作。随着工具链成熟,轻量级CDC方案已取代早年动辄集群的“全家桶”架构,单进程、低依赖、配置化成为主流。本文从CDC原理与选型维度出发,拆解Debezium、Flink CDC、Canal、Maxwell、SeaTunnel五类方案,并针对国产数据库达梦给出海量实操配置、全量与增量衔接、时区与幂等性等真实实践建

weixin_34380948的博客 465

Debezium是什么

Debezium是什么 Debezium是一个用来捕获数据库数据变更的分布式服务,你的应用可以看到这些数据变更,以及处理他们。Debezium以更改事件流的形式记录每张表的行级变更。 然后应用可以以事件流产生的顺序读取事件流变更记录。 目前支持的Source Connectors是Mysql,MongoDB,PostgresSQL、Oracle、SQL Server、Db2、Cassamdra、Vitesss。 目前Cassandra、Vitess处于孵化阶段。 说明:孵化连接器发版用于预览目的,对于孵

fengfengzai0101的博客 1万+

数据同步两大方案:游标同步与CDC的深度对比

数据同步是构建实时数仓和数据管道的基础环节。常见的同步方式包括基于查询的游标同步和基于日志的变更数据捕获(CDC)。游标同步依赖轮询查询,实现简单但难以捕获删除事件;CDC通过解析binlog等日志,能提供完整变更流。理解两者的原理和适用边界,有助于根据业务需求选择合适方案,平衡延迟、一致性和运维成本。文章从核心原理、实现示例到性能影响,系统梳理了二者的关键差异,帮助开发者在数据同步、实时数仓等场景中做出更合理的技术选型。

weixin_34220179的博客 361

实时数据同步利器debezium教程

1 debezium概述 Debezium是一个开源项目,为捕获数据更改(change data capture,CDC)提供了一个低延迟的流式处理平台。你可以安装并且配置Debezium去监控你的数据库,然后你的应用就可以消费对数据库的每一个行级别(row-level)的更改。 只有已提交的更改才是可见的,所以你的应用不用担心事务(transaction)或者更改被回滚(roll back)。Debezium为所有的数据库更改事件提供了一个统一的模型,所以你的应用不用担心每一种数据库管理系统的错综复杂性。

数智技术 2万+

轻量级CDC与流处理:2026年数据同步选型实践指南

在数据实时同步与集成场景中,变更数据捕获(CDC)是感知源库增删改的关键机制,而流处理则负责对捕获的变更事件进行过滤、转换与投递。传统做法常以Kafka+Flink搭建重量级链路,但面对每天百万级变更、秒级延迟的大部分业务,运维成本往往超过收益。随着SeaTunnel等数据集成工具提供轻量模式,以及嵌入式库、单进程守护程序的成熟,企业可以用最小成本构建CDC到流处理的闭环。理解binlog日志抓取、位点管理与DDL兼容等底层原理,有助于避免数据丢失与错乱。从单表同步到异构数据源集成,轻量级CDC方案正成为中

weixin_34268310的博客 267

基于Flink CDC实现MySQL到Elasticsearch秒级数据同步实战

数据一致性是分布式系统架构中的核心挑战,尤其在微服务与多数据源场景下,数据延迟会导致业务逻辑错误与用户体验下降。其技术原理在于通过变更数据捕获(CDC)机制,实时监听数据库日志变更,将增量数据以事件流形式同步至下游系统。这项技术的核心价值在于以低侵入方式实现端到端的秒级数据一致性,有效支撑实时搜索索引更新、缓存刷新、跨服务数据同步等关键场景。本文聚焦Flink CDC这一主流技术方案,通过热门的Docker Compose快速搭建测试环境,详细演示如何构建从MySQL到Elasticsearch的实时数据管

weixin_34200628的博客 290

oracle实时同步_实时数据同步工具那么多,我们应该怎么选?

因为项目选项需要,最近了解了一下几款实时数据同步工具,在此做一个简单介绍和对比,给大家一个参考。1.Debezium Debezium是RedHat开源的一个将多种数据源实时变更数据捕获,形成数据流输出的工具。通过安装配置Debezium监控数据库,可以实时消费行级别(row-level)的更改。身为一个分布式系统,Debezium也拥有良好的容错性。 Deb...

weixin_39777488的博客 7259

数据对接方案设计:从ETL到CDC,打通企业数据孤岛的实战指南

数据对接是企业数据治理与数据中台建设的核心基础环节,旨在解决不同系统间的数据流通与整合问题。其核心原理是通过抽取、转换、加载等过程,将异构数据源的数据进行标准化处理并同步至目标系统。这项技术的价值在于打破数据孤岛,实现数据资产统一,为数据分析、业务协同和实时决策提供高质量的数据基础。在应用场景上,无论是传统的T+1报表、数据仓库构建,还是实时数仓、用户画像更新和系统间状态同步,都依赖于高效可靠的数据对接方案。本文聚焦于数据对接的实战设计,深入剖析了包括ETL、实时CDC在内的主流技术路径,并针对数据同步延迟

weixin_30924239的博客 354

MySQL实时数据同步:基于binlog与Maxwell的CDC管道实践

在数据仓库建设中,实时数据同步是支撑大屏展示、运营报表等业务的关键环节。随着实时性要求提升,传统批量同步已难以满足需求,基于binlog的CDC(变更数据捕获)技术应运而生。CDC通过解析数据库binlog实时捕获数据变更,具有低延迟、低侵入等优势,已成为构建实时数据管道的主流方式。本文从MySQL的binlog机制出发,深入讲解ROW格式、GTID等核心配置对数据同步的影响,并对比AWS DMS与自建管道的适用场景,详细介绍了基于Maxwell解析binlog、结合Kafka与S3的完整同步架构。同时,文

weixin_34212762的博客 307

Debezium系列之:Debezium 异步引擎

Debezium 提供了一种从项目一开始就直接在 Debezium 内运行连接器的方法。随着时间的推移,它的提供方式已经发生了变化,并且仍在不断发展。本文将描述这方面的另一个演变步骤 - Debezium 引擎的新实现。

zhengzaifeidelushang的博客 818

一、Debezium介绍

Debezium 是一个用于变更数据捕获的开源分布式平台。启动它,将其指向您的数据库,您的应用程序可以开始响应其他应用程序提交到您的数据库的所有插入、更新和删除操作。Debezium 耐用且快速,因此您的应用程序可以快速响应并且不会错过任何事件,即使出现问题。 上面是官方介绍,我用翻译软件直接翻译的,简单来说,这个开源项目就是可以监控到数据库的变化,包括DDL和DML变更,当然目前DDL的变更仅支持做基本的解析,例如分区表,外键,约束等均不支持,但是你可以进行扩展开发。 .........

al229的博客 1571

数据同步组件:Canal、Maxwell、Databus、DBSyncer、MongoShake、DTS

数据同步组件:Canal、Maxwell、Databus、DBSyncer、MongoShake、DTS

lonelymanontheway的博客 428

实时监控Mysql等数据库变化_进行数据同步_了解Debezium_--Debezium工作笔记001

在数据库中的更改被提交后,做一些额外的工作更新搜索索引,更新缓存,发送通知,运行业务逻辑,等等。使用捕获更改数据技术(changedatacapture,CDC),在源数据库的数据更改提交后,这些额外的工作可以被放在独立的线程或者进程(服务)中完成。另外,由于Debezium用持久化的、有副本备份的日志来记录数据库数据变化的历史,因此,你的应用可以随时停止再重启,而不会错过它停止运行时发生的事件,保证了所有的事件都能被正确地、完全地处理掉。2.消息体内容太多,对消息队列压力较大;......

添柴程序猿的专栏 1505

游标同步与CDC对比:增量数据同步方案选型实战

增量数据同步是数据架构中的关键环节,常见实现包括基于游标的轮询同步和基于日志的变更数据捕获(CDC)。游标同步依赖排序键与状态记录,简单易实现,但难以感知删除操作且无法捕获过程变更;CDC通过解析binlog等数据库日志,捕获每一次增删改事件,具备实时性强、数据完整性高的优势。在数仓入仓、异构迁移、缓存一致性等场景中,选择哪种方案直接影响同步效率与运维成本。本文从原理、实现、常见坑点与选型建议展开,结合MySQL、Debezium、Kafka等工具,对比两种方案的适用边界,帮助开发者在数据同步架构中做出合理

weixin_30745553的博客 402

LabVIEW面向对象编程:操作者框架入门实战

本文是LabVIEW面向对象编程中操作者框架的入门实战指南。针对传统“面条式代码”在复杂项目中的维护难题,文章通过创建操作者、定义消息与处理函数、在主VI中调用等步骤,详细演示了如何利用操作者框架构建模块化、易扩展的应用程序架构,有效管理并行任务。

f0g1h2的博客 588

遥感新手别纠结!实测ENVI 5.3、5.6、6.0三个免费版,教你混搭安装避坑

本文为遥感新手提供ENVI 5.3、5.6、6.0三个免费版的实测对比与混搭安装指南,帮助用户构建零成本高效工作流。详细解析各版本功能差异、共存安装技巧及常见问题解决方案,特别适合课程作业、毕业论文分析和遥感入门练习。

weixin_30819085的博客 471

新范式数据集成Awesome BigData:CDC技术与实时数据同步方案详解

在当今数据驱动的时代,企业面临着海量数据的处理挑战。**Awesome BigData**项目作为一个精心整理的大数据框架、资源和工具集合,为数据工程师提供了丰富的技术选型参考。特别是在**CDC技术**和**实时数据同步**领域,该项目汇集了众多优秀的解决方案,帮助企业构建高效可靠的数据集成架构。 ## 🔥 CDC技术:数据同步的革命性突破 **CDC(Change Data Captur

gitblog_00151的博客 561

解决创建conda环境时Solving environment: failed 和 ResolvePackageNotFound 的错误

环境配置文件是在别的机器上导出的,文件里的软件包是按照导出文件的机器配置的,因此导出的时候,把这些包的详细信息也导了出来,即第二个等号后面跟着的信息,当我们按照这个文件创建环境时,conda就会根据我们机器的配置信息,按照配置文件里包的详细信息,去找这个包,那当然找不到,结果发现“查无此包”,因此也就会报上面的错误。上面找到了问题的所在之处,解决起来就很简单了,只需要在配置文件 environment.yml 中将包的详细信息删除,也就是第二个等号后面的内容。然而升级超级慢不说,也没有解决我的问题。...

番茄炒蛋三分糖 4万+

Debezium实战:MySQL实时CDC到Kafka的工业级落地指南

MySQL变更数据捕获(CDC)是构建实时数仓、事件驱动架构和微服务数据一致性的核心技术基础。其原理在于绕过应用层,直接对接MySQL复制协议,以从库身份订阅binlog流,实现低延迟、零侵入的数据变更捕获。技术价值体现在精确一次语义、事务级一致性保障及与Kafka生态的深度集成能力。典型应用场景包括Flink实时计算源、支付风控链路、用户行为实时同步等。本文聚焦Debezium这一企业级CDC方案,深入解析其binlog解析机制、GTID与ROW格式依赖、Kafka Connect部署范式及生产调优实践,

weixin_29039773的博客 238

别再傻傻全盘暴力破解了!Passware Kit Forensic 2019.4.1 已知部分密码的精准爆破实战(附RAR案例)

本文详细介绍了如何利用Passware Kit Forensic的模式匹配功能,实现高效精准的密码破解,避免全盘暴力破解的资源浪费。通过RAR加密破解实战案例,展示了模式匹配技术的核心优势与操作步骤,帮助安全工程师大幅提升破解效率。

weixin_42524171的博客 404

小龙虾 OpenClaw 安装全攻略:本地部署 AI 智能体一步到位

OpenClaw(昵称小龙虾)是一款 MIT 开源协议的本地优先 AI 智能体执行网关,支持多平台接入、本地部署,能实现自然语言驱动的设备自动化操作,区别于纯对话 AI,可直接操控系统执行实际任务,数据全程本地存储更安全。本文带来 2026 最新版 OpenClaw 安装教程,适配 Windows/macOS/Linux 全系统,新手也能一键搞定。

lujiawei00的专栏 1971

java实时监听mysql_Java 中能实现监听数据库吗?

最近也在看这个。好像通过CDC实现对binlog的监控,然后实时进行数据传输或者更改。占个坑,等搞好这一块,有时间来回答好,经过了一段时间的调研以及测试,我现在来回答一下这个问题。通过CDC(catch data capture)模式可以实现对Java数据库的监听。现在市面上有这么几种主流的方式:1.Maxwell,这个框架是基于kafka的,然后通过修改MySQL配置文件可以获取其二进制日志文件...

weixin_32508515的博客 1113

【SemiDrive源码分析】【X9芯片启动流程】11 - freertos_safetyos目录Cortex-R5 DIL2.bin 引导程序源代码分析

【SemiDrive源码分析】【X9芯片启动流程】11 - freertos_safetyos目录Cortex-R5 DIL2.bin 引导程序源代码分析

|~~~热爱生活、努力学习的小伙汁~~~| 2106

轻量级CDC与流处理选型:从数据同步到实时同步的落地实践

数据同步是数据链路上最基础也最关键的环节,而增量同步技术则直接影响实时性和资源开销。Change Data Capture(CDC)作为捕获数据库变更的核心机制,正在从重量级平台架构向轻量化、可落地方向演进。理解其底层原理——基于日志解析、时间戳轮询或触发器——有助于工程师根据业务量级选择合适的技术路径。轻量级方案并非功能缩水,而是强调组件精简、单机可运行、分钟内完成部署,在保证断点续传和精确性的前提下,满足从MySQL到Kafka、从达梦到数仓的同步场景。Flink CDC提供强大的流式计算表达能力,De

weixin_34194087的博客 268

OpenClaw三层记忆系统:让你的AI助理记住你的习惯,越用越顺手

对于更早的、已经移出滑动窗口的对话内容,我们没有直接丢弃,而是用大模型做摘要压缩,只保留核心信息,然后把摘要存入短期会话记忆的末尾,或者长期用户记忆。比如,10轮之前的对话内容,我们会压缩成:“用户之前查询了仓山万达店4月1日-4月7日的库存数据,对报表的要求是纯文本,不要Markdown”,既保留了核心信息,又不会占用太多上下文窗口。如果说Agent的执行链路是AI的“骨架”,工具调用体系是AI的“手脚”,那么记忆系统就是AI的“大脑”

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 378

智算中心建设项目初步设计方案

本项目面向区级政府、智算中心及文旅从业者,聚焦某区智算中心一期建设,响应数字经济与智慧城市建设政策,推动文旅产业升级。遵循统筹规划、数据驱动原则,目标打造智慧文旅样板。建设内容涵盖云网数据底座(以租代建)、数据中台(全生命周期管理)、智慧文旅平台(含“一机游”电商)及气象监测等配套,采用前后端架构与低代码开发,强化三级等保与纵深防御,实现安全可控。方案融合多类资源目录,提供从设计到运营的完整技术支撑,助力区域智算与文旅深度融合。

cdfunlove的博客 111
上一篇: Kafka系列(七)、Kafka套件 Confluent Platform 单机/集群部署
下一篇: scala中下划线的几种含义
王义凯_Rick
王义凯_Rick 领域专家: 大数据技术领域 领域专家: 大数据技术领域
博客等级 码龄14年 858粉丝 162原创
评论 14
成就一亿技术人!
拼手气红包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、付费专栏及课程。

余额充值