debezium-mysql使用(一)

docker 安装mysql 参考: docker 安装mysql 8.x_大大蚊子的博客-CSDN博客

docker 安装kafka 参考:  docker 安装 kafka单节点_docker kafka 单节点_大大蚊子的博客-CSDN博客

docker 安装debezium参考:debezium docker 容器创建_大大蚊子的博客-CSDN博客

环境描述:

已安装mysql数据库

已安装kafka

已安装debezium

检查mysql是否满足debezium接入

1、log_bin 开启

show variables like 'log_%';

 2、binlog_format 为ROW

show variables like '%format%';

 

 如不满足,修改mysql 配置文件

查找my.cnf 文件

mysqld --verbose --help | grep -A 1 'options'

 

修改以下配置并重启

log_bin = mysql-bin
binlog_format = ROW
binlog_row_image = FULL
expire_logs_days = 10

service mysqld restart

创建CDC专属用户(可选,测试可以直接使用root用户)

 5.7

grant select,reload,show databases,replication slave,replication client on *.* to 'dbz_user'@'%' identified by 'dbz_user';
flush privileges;

8.X

create user 'dbz_user'@'%' identified by 'dbz_user';
grant select,reload,show databases,replication slave,replication client on *.* to 'dbz_user'@'%' with grant option;
flush privileges;

开启采集作业

 postman

接口一: POST 创建作业   查询serverid    SELECT@@server_id  

http://192.168.1.5:8083/connectors

{
    "name": "mysql_test_01", 
    "config": {
        "connector.class": "io.debezium.connector.mysql.MySqlConnector", 
        "database.hostname": "192.168.1.106", 
        "database.port": "3306", 
        "database.user": "root", 
        "database.password": "123456", 
        "database.server.id": "1", 
        "database.server.name": "mysql_test", 
        "database.include.list": "dbz_mysql", 
        "database.history.kafka.bootstrap.servers": "192.168.1.102:9092", 
        "database.history.kafka.topic": "dbhistory.fullfillment", 
        "include.schema.changes": "true" 
    }
}

 接口二: get 获取作业列表   http://192.168.1.5:8083/connectors/

 mysql 操作数据

kafka 消费对应数据

/opt/bitnami/kafka/bin/kafka-console-consumer.sh --property print.key=true --property print.timestamp=ture --bootstrap-server 192.168.1.102:9092 --topic mysql_test.dbz_mysql.aa  --from-beginning


{"schema":{"type":"struct","fields":[{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"}],"optional":true,"name":"mysql_test.dbz_mysql.aa.Value","field":"before"},{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"}],"optional":true,"name":"mysql_test.dbz_mysql.aa.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,incremental"},"default":"false","field":"snapshot"},{"type":"string","optional":false,"field":"db"},{"type":"string","optional":true,"field":"sequence"},{"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":"mysql_test.dbz_mysql.aa.Envelope"},"payload":{"before":{"id":2},"after":{"id":3},"source":{"version":"1.9.5.Final","connector":"mysql","name":"mysql_test","ts_ms":1678548518000,"snapshot":"false","db":"dbz_mysql","sequence":null,"table":"aa","server_id":1,"gtid":null,"file":"binlog.000006","pos":675,"row":0,"thread":11,"query":null},"op":"u","ts_ms":1678548518053,"transaction":null}}

<think>好的,用户想了解Debezium Embedded的使用和配置。首先,我需要确认Debezium Embedded的基本概念,确保自己理解正确。Debezium通常用于CDC(Change Data Capture),而Embedded模式允许将其集成到应用中,而不是作为独立服务运行。 接下来,用户可能需要知道如何开始使用,比如添加依赖。对于Java项目,Maven依赖是常见的,所以需要提供正确的groupId和artifactId,比如io.debezium:debezium-api和io.debezium:debezium-embedded。还有核心的配置参数,比如connector.class、database.hostname等,这些是必须的。 然后,配置步骤需要详细说明,包括创建配置属性、实例化EmbeddedEngine,以及处理变更事件。用户可能需要代码示例来理解如何实现,比如使用Java代码展示配置和启动引擎。同时,处理逻辑部分需要说明如何解析SourceRecord,这里可以提到反序列化器的使用。 另外,高级配置部分,用户可能对如何监控、错误处理和性能优化感兴趣。需要提到JMX监控、重试策略和线程池调整。可能还需要提醒连接器特定配置,比如MySQL或PostgreSQL的不同参数。 用户的问题可能还涉及实际应用中的问题,比如如何处理大数据量或者保证数据致性,这些需要在高级配置里简要提及。同时,注意引用来源,比如参考Debezium官方文档,确保信息的准确性。 最后,生成相关问题时要考虑用户可能进步的需求,比如应用场景、性能调优、错误处理以及与其他系统的集成。这些问题能帮助用户更全面地应用Debezium Embedded。</think>### Debezium Embedded 使用与配置详解 #### 、核心概念 Debezium Embedded 是将变更数据捕获(CDC)功能直接嵌入Java应用程序的模式,无需部署独立Kafka连接集群。其核心依赖关系满足: $$ \text{Debezium Embedded} \subseteq \text{Debezium Core} \subseteq \text{Kafka Connect API} $$ #### 二、基础配置步骤 1. **添加依赖**(Maven示例): ```xml <dependency> <groupId>io.debezium</groupId> <artifactId>debezium-api</artifactId> <version>2.3.0.Final</version> </dependency> <dependency> <groupId>io.debezium</groupId> <artifactId>debezium-embedded</artifactId> <version>2.3.0.Final</version> </dependency> ``` 2. **基础配置参数**: ```properties connector.class=io.debezium.connector.mysql.MySqlConnector database.hostname=192.168.1.100 database.port=3306 database.user=debezium database.password=dbz database.server.id=184054 database.server.name=inventory database.include.list=inventory table.include.list=inventory.customers ``` 3. **嵌入式引擎启动**: ```java Configuration config = Configuration.create() .with("name", "embedded-engine") .with("connector.class", MySqlConnector.class) .with("offset.storage", MemoryOffsetBackingStore.class) .build(); EmbeddedEngine engine = EmbeddedEngine.create() .using(config) .notifying(record -> { SourceRecord sourceRecord = record.sourceRecord(); Struct value = (Struct) sourceRecord.value(); // 处理变更数据 }).build(); ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(engine); ``` #### 三、高级配置项 1. **反序列化配置**: ```java .with("value.converter", AvroConverter.class) .with("value.converter.schema.registry.url", "http://localhost:8081") ``` 2. **监控集成**: ```java .with("metric.reporters", JmxReporter.class) .with("jmx.domain", "debezium") ``` 3. **容错配置**: ```java .with("errors.max.retries", 5) .with("retry.delay.max.ms", 60000) ``` #### 四、连接器特定配置 | 数据库类型 | 关键配置项 | 默认值 | |----------|----------|--------| | MySQL | `database.server.id`<br>`snapshot.mode` | initial | | PostgreSQL | `plugin.name`<br>`slot.name` | decoderbufs<br>debezium | | MongoDB | `mongodb.members.auto.discover`<br>`capture.mode` | true<br>change_streams | #### 五、性能优化建议 1. 调整批量处理参数: $$ \text{max.batch.size} \times \text{max.queue.size} \leq \text{JVM Heap Size} \times 0.3 $$ 2. 使用并行处理时需满足: $$ \text{task.threads} \leq \text{CPU核心数} \times 2 $$ [^1]: 配置参考Debezium官方文档的嵌入式模式章节
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大大蚊子

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值