Debezium-Embedded 实时监控MySQL数据变更

1.Debezium-Embedded 简介

Debezium连接器的操作通常是将它们部署到Kafka Connect服务,并配置一个或多个连接器来监控上游数据库,并为它们在上游数据库中看到的所有更改生成数据更改事件。这些数据更改事件被写入Kafka,在那里它们可以被许多不同的应用程序独立使用。Kafka Connect提供了出色的容错性和可扩展性,因为它作为分布式服务运行,并确保所有注册和配置的连接器始终在运行。例如,即使集群中的一个Kafka Connect端点出现故障,其余的Kafka连接端点也会重新启动以前在现已终止的端点上运行的任何连接器,从而最大限度地减少停机时间并消除管理活动。

并不是每个应用程序都需要这种级别的容错和可靠性,他们可能不想依赖外部的Kafka代理和Kafka Connect服务集群。相反,一些应用程序更喜欢将Debezium连接器直接嵌入到应用程序空间中。他们仍然想要相同的数据更改事件,但更喜欢让连接器将它们直接发送到应用程序,而不是将它们保存在Kafka中。

这个Debezium-Embedded模块定义了一个小型库,允许应用程序轻松配置和运行debezium连接器。

2.MySQL端配置

2.1 开启日志

MySQL开启日志配置可参考MySQL 主从配置-CSDN博客实现。

show variables like 'log_%';

2.2 创建监控账号并授权

#创建账号

create user debezium@'%' identified with mysql_native_password by 'wsx-123';

#给账号授权

GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'debezium'@'%';

#刷新权限

FLUSH PRIVILEGES;

3.应用端开发

3.1 maven 引用debezium-embedded

复制代码
<dependency>
    <groupId>io.debezium</groupId>
    <artifactId>debezium-embedded</artifactId>
    <version>${debezium-embedded.version}</version>
</dependency>
<dependency>
    <groupId>io.debezium</groupId>
    <artifactId>debezium-connector-mysql</artifactId>
    <version>${debezium-embedded.version}</version>
</dependency>

3.2 代码开发

java 复制代码
package com.dayesmart.dataplusjava.util;

import io.debezium.config.Configuration;
import io.debezium.embedded.EmbeddedEngine;
import io.debezium.engine.DebeziumEngine;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.connect.source.SourceRecord;

import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

@Slf4j
public class DebeziumTest {
    public static void main(String[] args) {
        Executor executor = Executors.newSingleThreadExecutor();
        Configuration config = Configuration.create()
                /* begin engine properties */
                .with("connector.class",
                        "io.debezium.connector.mysql.MySqlConnector")
                .with("offset.storage",
                        "org.apache.kafka.connect.storage.FileOffsetBackingStore")
                .with("offset.storage.file.filename",
                        "E:/tmp/debezium/offset.dat")
                .with("offset.flush.interval.ms", 60000)
                /* begin connector properties */
                .with("name", "my-sql-connector")
                .with("database.hostname", "127.0.0.1")
                .with("database.port", 3307)
                .with("database.user", "debezium")
                .with("database.password", "wsx-123")
                .with("database.connectionTimeZone", "Asia/Shanghai")
                .with("database.server.id", 85744)
                .with("database.include.list","test")
                .with("snapshot.mode","initial")
                .with("database.server.name","weisx")
                .with("database.history",
                        "io.debezium.relational.history.FileDatabaseHistory")
                .with("database.history.file.filename",
                        "E:/tmp/debezium/schemahistory.dat")
                .build();

// Create the engine with this configuration ...
        EmbeddedEngine engine = EmbeddedEngine.create()
                .using(config)
                .notifying(new EmbeddedEngine.ChangeConsumer(){
                    @Override
                    public void handleBatch(List<SourceRecord> list, DebeziumEngine.RecordCommitter<SourceRecord> recordCommitter) throws InterruptedException {
                        log.info("{}",list);
                    }
                })
                .using((success,message,error) ->{
                    log.info("success:{},message:{},error:{}",success,message,error);

                })
                .build();

// Run the engine asynchronously ...

        executor.execute(engine);

    }

}
相关推荐
天天摸鱼的java工程师26 分钟前
从被测试小姐姐追着怼到运维小哥点赞:我在项目管理系统的 MySQL 优化实战
java·后端·mysql
Clang's Blog31 分钟前
一键搭建 WordPress + MySQL + phpMyAdmin 环境(支持 PHP 版本选择 & 自定义配置)
数据库·mysql·php·wordpr
异常君1 小时前
高并发数据写入场景下 MySQL 的性能瓶颈与替代方案
java·mysql·性能优化
RestCloud1 小时前
如何通过ETLCloud实现跨系统数据同步?
数据库·数据仓库·mysql·etl·数据处理·数据同步·集成平台
程序员岳焱2 小时前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
后端·sql·mysql
秃头摸鱼侠2 小时前
MySQL安装与配置
数据库·mysql·adb
tonexuan3 小时前
MySQL 8.0 绿色版安装和配置过程
数据库·mysql
JohnYan3 小时前
工作笔记- 记一次MySQL数据移植表空间错误排除
数据库·后端·mysql
我最厉害。,。4 小时前
Windows权限提升篇&数据库篇&MYSQL&MSSQL&ORACLE&自动化项目
数据库·mysql·sqlserver
@大嘴巴子5 小时前
MySQL知识回顾总结----数据库基础
数据库·mysql