当前位置: 首页 > news >正文

MySQL Binlog 监听方案

如果 EmbeddedEngine 类在 debezium-connector-mysql 中不可用,原因是 Debezium 的新版本移除了 EmbeddedEngine。这是因为 Debezium 的架构变更,它现在鼓励使用 Kafka ConnectDebezium Server 来处理数据变更事件。

下面是几种替代方法来实现 MySQL Binlog 监听,你可以根据项目需求选择合适的方案。


替代方案 1:使用 Debezium Server 监听 Binlog

Debezium Server 是一个独立的服务,可以将 MySQL Binlog 的变更事件发送到目标系统,如 KafkaPulsarGoogle Pub/Sub 等。你可以将它作为一个独立服务运行,并将结果集成到 Spring Boot 中。


🔧 步骤:

1️⃣ 下载 Debezium Server

从官方 GitHub 下载最新的 Debezium Server:

👉 Debezium Server Releases


2️⃣ 配置 application.properties

在 Debezium Server 的配置文件中配置 MySQL 连接目标系统(如 Kafka)。

debezium.sink.type=kafka
debezium.sink.kafka.bootstrap.servers=localhost:9092debezium.source.connector.class=io.debezium.connector.mysql.MySqlConnector
debezium.source.database.hostname=localhost
debezium.source.database.port=3306
debezium.source.database.user=root
debezium.source.database.password=your_password
debezium.source.database.server.id=85744
debezium.source.database.include.list=your_database
debezium.source.database.history.kafka.bootstrap.servers=localhost:9092
debezium.source.database.history.kafka.topic=schema-changes.your_database

3️⃣ 运行 Debezium Server

java -jar debezium-server-<version>.jar

4️⃣ 在 Spring Boot 中消费 Kafka 消息

你可以在 Spring Boot 中使用 Kafka 监听来自 Debezium 的事件。

添加依赖:
<dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId>
</dependency>
创建 Kafka 消费者:
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;@Service
public class KafkaBinlogConsumer {@KafkaListener(topics = "your_database.your_table", groupId = "binlog-group")public void listen(String message) {System.out.println("Received: " + message);// 解析并处理 Binlog 数据}
}

替代方案 2:使用 Kafka Connect

如果你已经使用 Kafka,可以通过 Kafka Connect 部署 Debezium MySQL Connector 来监听 MySQL Binlog


🔧 配置步骤:

1️⃣ 启动 Kafka Connect

确保 Kafka Connect 已启动:

./bin/connect-distributed.sh config/connect-distributed.properties

2️⃣ 配置 MySQL Connector

创建一个 Debezium MySQL Connector 的 JSON 文件:

{"name": "mysql-connector","config": {"connector.class": "io.debezium.connector.mysql.MySqlConnector","database.hostname": "localhost","database.port": "3306","database.user": "root","database.password": "your_password","database.server.id": "1","database.include.list": "your_database","database.history.kafka.bootstrap.servers": "localhost:9092","database.history.kafka.topic": "schema-changes.your_database"}
}

将该配置文件 POST 到 Kafka Connect 的 REST API:

curl -X POST -H "Content-Type: application/json" --data @mysql-connector.json http://localhost:8083/connectors

替代方案 3:使用 Maxwell for Binlog 监听

Maxwell 是一个轻量级的工具,用于将 MySQL Binlog 转换成 JSON 格式 并发送到 Kafka、Pulsar、Redis、Elasticsearch 等系统。

👉 Maxwell GitHub


🔧 步骤:

1️⃣ 下载并配置 Maxwell

wget https://github.com/zendesk/maxwell/releases/download/v1.40.0/maxwell-1.40.0.tar.gz
tar -xvf maxwell-1.40.0.tar.gz

2️⃣ 运行 Maxwell

bin/maxwell --user='root' --password='your_password' --host='localhost' --producer=kafka

替代方案 4:使用 Canal for Binlog 监听

Alibaba Canal 是一个用于监听 MySQL Binlog 的工具,支持将变更数据发送到 KafkaRabbitMQ 等消息队列中。

👉 Canal GitHub


总结对比

工具使用场景优势备注
Debezium Server不依赖 Kafka直接将数据推送到目标系统官方推荐的架构变更方式
Kafka Connect使用 Kafka 的场景生态系统丰富,支持多种数据源适合大规模数据同步
Maxwell轻量级 JSON Binlog 监听器简单易用,配置方便适合小型项目
Canal高性能、支持多种目标系统支持多种 MQ,性能较高需要更多配置

如果你不想引入 Kafka,可以使用 Debezium Server,它支持直接将 MySQL Binlog 同步到 文件、Pulsar、Google Pub/Sub 等多种目标。


http://www.mrgr.cn/news/82615.html

相关文章:

  • 2025运维故障记 1 | 1/3 德国机场突陷电脑系统故障风暴
  • 数树数(中等难度)
  • 享元模式详解
  • 实际开发中,常见pdf|word|excel等文件的预览和下载
  • SQL使用游标
  • 钓鱼攻击(Phishing)详解和实现 (网络安全)
  • 智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之20 再次重建 之5 项目文件三大部 整“拼”项目文档总述
  • 保姆级教程Docker部署ClickHouse镜像
  • 2025/1/1 路由期末复习作业二
  • Golang 入门基础知识
  • 【前序、中序、后序遍历递归栈的实现】
  • 计算机组成原理期末复习
  • 基于STM32环境温湿度监测系统设计(附项目代码zip)
  • Android Studio学习笔记
  • SpringBoot入门之创建一个Hello World项目
  • 服务器信息整理:用途、操作系统安装日期、设备序列化、IP、MAC地址、BIOS时间、系统
  • 【动态重建】时间高斯分层的长体积视频
  • 期末速成C++【大题汇总完】
  • 【蓝桥杯研究生组】第14届Java试题答案整理
  • DES密码的安全性分析(简化版本)
  • MySQL 08 章——聚合函数
  • 算法题(25):只出现一次的数字(三)
  • CSP初赛知识学习计划(第一天)
  • Spring Boot 3 实现 MySQL 主从数据库之间的数据同步
  • React Native 项目 Error: EMFILE: too many open files, watch
  • 密码学精简版