binlog4j 1.1.0 发布,Java 轻量级 MySQL Binlog 客户端


Binlog4j

轻量级 Mysql Binlog 客户端, 提供宕机续读, 高可用集群等特性

项目特性

  • 集群模式, 通过集群部署的方式,保证服务高可用。

  • 宕机续读, 避免宕机期间造成数据丢失。

  • 数据转换, 基于泛型封装 binlog Event 的序列化数据。

  • 兼容 传统项目 与 Spring Boot / Cloud 项目。

  • 兼容 Spring Boot 2.x 与 Spring Boot 3.x 版本。

更新内容(1.1.0)

[破坏] IBinlogEventHandler 接口入参由 T 调整为 BinlogEvent。
[新增] @BinlogSubscriber 注解 database 与 table 属性 pattern 匹配。
[新增] @BinlogSubscriber 注解 database 与 table 属性默认值为 .*。
[移动] BinlogUtils 包路径为 com.gitee.Jmysy.binlog4j.core.utils。
[新增] PatternUtils 内置工具 Class

下载安装

<dependency>
 <groupId>com.gitee.Jmysy</groupId>
 <artifactId>binlog4j-core</artifactId>
 <version>latest.version</version>
</dependency>

implementation group: 'com.gitee.Jmysy', name: 'binlog4j-core', version: 'latest.version'

简单使用

通过 BinlogClient 创建 binlog 客户端, IBinlogEventHandler 用于接受 binlog 事件通知, 该接口允许使用泛型, 数据将遵循驼峰规则进行封装。

public class BootStrap {

public static void main(String[] args) {

BinlogClientConfig clientConfig = new BinlogClientConfig();
clientConfig.setHost("127.0.0.1");
clientConfig.setPort(3306);
clientConfig.setUsername("root");
clientConfig.setPassword("taoren@123");
clientConfig.setServerId(1990);

IBinlogClient binlogClient = new BinlogClient(clientConfig);

binlogClient.registerEventHandler("database", "table", new IBinlogEventHandler() {

@Override
public void onInsert(BinlogEvent event) {
System.out.println("插入数据:{}", event.getData());
}

@Override
public void onUpdate(BinlogEvent event) {
System.out.println("修改数据:{}", event.getData());
}

@Override
public void onDelete(BinlogEvent event) {
System.out.println("删除数据:{}", event.getData());
}
});

binlogClient.connect();
}
}

高级特性

通过 Persistence 配置为 true 启用宕机续读功能, Binlog4j 会将 binlog 的 filename 与 position 记录到 redis, 所以同时你需要设置 Redis 配置。

public class BootStrap {

public static void main(String[] args) {

RedisConfig redisConfig = new RedisConfig();
redisConfig.setHost("127.0.0.1");
redisConfig.setPort(6379);
redisConfig.setPassword("taoren@123");

BinlogClientConfig clientConfig = new BinlogClientConfig();
clientConfig.setHost("127.0.0.1");
clientConfig.setPort(3306);
clientConfig.setUsername("root");
clientConfig.setPassword("taoren@123");
clientConfig.setServerId(1990); // Client 编号
clientConfig.setRedisConfig(redisConfig); // Redis 配置
clientConfig.setPersistence(true); // 启用持久化 (宕机重启后, 从上次读取的位置开始)
clientConfig.setMode(BinlogClientMode.cluster); // 高可用集群

BinlogClient binlogClient = new BinlogClient(clientConfig);

binlogClient.registerEventHandler("database", "table", new IBinlogEventHandler<User>() {

@Override
public void onInsert(BinlogEvent<User> event) {
System.out.println("插入数据:{}", event.getData());
}

@Override
public void onUpdate(BinlogEvent<User> event) {
System.out.println("修改数据:{}", event.getData());
}

@Override
public void onDelete(BinlogEvent<User> event) {
System.out.println("删除数据:{}", event.getData());
}
});

binlogClient.connect();
}
}

Spring Boot Starter

<dependency>
<groupId>com.gitee.Jmysy</groupId>
<artifactId>binlog4j-spring-boot-starter</artifactId>
<version>latest.version</version>
</dependency>

implementation group: 'com.gitee.Jmysy', name: 'binlog4j-spring-boot-starter', version: 'latest.version'

首先, 在 application.yml 中填写 BinlogClient 配置

spring:
binlog4j:
redis-config:
host: 127.0.0.1
port: 6379
password: taoren@123
client-configs:
master:
username: root
password: taoren@123
host: 127.0.0.1
port: 3306
serverId: 1990

使用 @BinlogSubscriber 注解, 指定 IBinlogEventHandler 需要注册到哪个客户端, 并且指定监听的 database 与 table。

@BinlogSubscriber(clientName = "master", database = "pear-admin", table ="sys_user")
public class UserEventHandler implements IBinlogEventHandler<User> {

@Override
public void onInsert(BinlogEvent<User> event) {
System.out.println("插入数据:" + event.getData());
}

@Override
public void onUpdate(BinlogEvent<User> event) {
System.out.println("修改数据:" + event.getData());
}

@Override
public void onDelete(BinlogEvent<User> event) {
System.out.println("删除数据:" + event.getData());
}

}

多表监听, database 与 table 使用 Pattern 匹配, 泛型不应该再被使用, data 默认为 Map<String, Object> 类型

@BinlogSubscriber(clientName = "master", database = ".*", table ="sys.*")
public class UserEventHandler implements IBinlogEventHandler<User> {

@Override
public void onInsert(BinlogEvent<User> event) {
System.out.println("数据库:" + event.getDatabase());
System.out.println("数据表:" + event.getTable());
System.out.println("新数据:" + event.getData());
}

@Override
public void onUpdate(BinlogEvent<User> event) {
System.out.println("数据库:" + event.getDatabase());
System.out.println("数据表:" + event.getTable());
System.out.println("原数据:" + event.getOriginalData());
System.out.println("新数据:" + event.getData());
}

@Override
public void onDelete(BinlogEvent<User> event) {
System.out.println("数据库:" + event.getDatabase());
System.out.println("数据表:" + event.getTable());
System.out.println("新数据:" + event.getData());
}

}

相關推薦

2023-07-20

,可以将JSON格式的输出保存在一个用户变量中。 保留客户端注释,MySQL8.1保留mysql客户端的注释,如果需要使用之前的行为,需要使用--skip-comments选项 MySQL Replication更改SOURCE_RETRY_COUNT,CHANGE REPLICATION SOURCE TO 语句中SOURCE_R

2023-03-25

存储引擎、日志引擎、Kube等。 2022年1月,PolarDB-X 正式发布 2.0.0 版本,继 2021 年 10 月 20 号云栖大会正式开源后的第一次版本更新,更新内容包括新增集群扩缩容、以及binlog生态兼容等特性,兼容 maxwell 和 debezium 增量日志订阅

2023-07-06

数据采集 ETL & 流批一体化框架 bboss v7.0.2 发布 --- 高效、稳定、快速、安全 bboss 由三部分构成 Elasticsearch Highlevel Java Restclient 数据采集同步 ETL 流批一体化计算框架 bboss版本最新版本号从以下文档章节获取:

2023-11-07

ient , 一个高性能高兼容性的 Elasticsearch/Opensearch java 客户端框架 数据采集同步 ETL ,一个基于 java 语言实现数据采集作业的强大 ETL 工具,提供丰富的输入插件和输出插件,可以基于插件规范轻松扩展新的输入插件和

2023-10-27

“mysql_native_password”认证方法被禁用,使用该方法的旧的客户端插件将无法连接服务器,并在错误日志中写入“Access denied”消息。 MySQL 企业版现在支持MySQL服务器使用智能卡、安全设备等方法进行身份验证。该身份验证方法

2023-12-30

GreatSQL 8.0.32-25 今日发布 版本信息 发布时间:2023年12月28日 版本号:8.0.32-25, Revision db07cc5cb73 下载链接:RPM包、TAR包、源码包 用户手册:GreatSQL 8.0.32-25 User Manual 特性增强 GreatSQL 8.0.32-25版本中首次推出支持高性

2023-08-04

大的变化和修改,代码进行了重构。MySQL 8.0 在 2016-09-12 发布, 重写了 5.7 中解析器的近 50% 的代码。MySQL 将编程语言都统一到 C++,编译器使用最新版本,代码风格采用 Google C++ Style,统一了 300 人的开发团队的代码标准。 目前 M

2023-06-06

以便达到不同的审计需求。 审计内容将包括操作账户、客户端ip、被操作的数据库对象、操作的完整语句、操作结果。 更多信息详见文档:GreatSQL中的审计日志入表特性**(https://gitee.com/GreatSQL/GreatSQL-Doc/blob/master/relnotes/greatsql-8

2023-09-26

ient , 一个高性能高兼容性的 Elasticsearch/Opensearch java 客户端框架 数据采集同步 ETL ,一个基于 java 语言实现数据采集作业的强大 ETL 工具,提供丰富的输入插件和输出插件,可以基于插件规范轻松扩展新的输入插件和

2022-11-05

2022年云栖大会上,PolarDB-X 发布2.2.0版本,这是一个重要的里程碑版本,重点推出符合分布式数据库金融标准下的企业级和国产化适配,共包括八大核心特性,全面提升 PolarDB-X 分布式数据库在金融、通讯、政务等行业的普适性。

2023-03-30

新特性,包括专门的 JVM 参数配置文件、作业监控信息的客户端输出,Zeta 集群信息和作业信息的 Rest API 等。 在 checkpoint 层面,2.3.1 版本 Zeta 支持使用 OSS 作为 checkpoint 存储。同时支持对运行中的作业进行 savepoint 以及从 savepoin

2023-08-04

很高兴向大家宣布,StoneDB-5.7-V1.0.4 版本今天正式发布了!自三月份发布 1.0.3-GA 版本后,我们的研发同学把大量的精力投入到了 1.0.4 版本的研发中,在本次版本中,我们对 StoneDB 的稳定性做了大幅的优化提升,新增了一些实用

2023-02-16

伙伴们加班加点可算是把万众期待的 StoneDB-5.7-V1.0.2 版本发布了,在新版本中,StoneDB 新增了一批常用功能、解决了一批常见Bug,并在用户使用体验上进行了极大地优化,大家可以到我们的 Github Repo 下载我们的安装包哦~ 版

2023-03-02

或公有云;部署和管理大量的 MySQL 实例。 Vitess 16 正式发布,更新内容如下: 文档改进 在这个版本中,Vitess 维护团队决定把重点放在审查、编辑和重写网站文档上,以便与代码保持一致。在 CNCF 的帮助下,Vitess 还改善了搜