R2DBC 可用于 Spring 引导中的更改数据捕获?

R2DBC can be used for change data capture in Spring boot?

我有一个经典的 Spring 引导应用程序连接到 MySQL 数据库。

我可以使用 r2dbc driver and spring data r2dbc 开发另一个应用程序来侦听数据库更改,例如更改数据捕获吗?

我研究了 r2dbc 驱动程序文档,但我不明白它们是产生反应性热流还是只产生冷流。 如果不可能,我相信我应该使用 Debezium, like I found in this article.

非常感谢

TL;DR

R2DBC 主要是一个规范,用于启用 reactive/non-blocking 与数据库的通信。 R2DBC 驱动程序的功能很大程度上取决于您的数据库。

加长版

R2DBC 指定了一组接口,包括通过 Publisher 激活每个数据库对话的方法。 R2DBC 对基础 wire 协议 没有意见。相反,实现 R2DBC 的数据库驱动程序必须遵守其数据库通信协议。您通过 JDBC 或 ODBC 获得的内容与您对 R2DBC 驱动程序的期望几乎相同。

差异较小:一些 JDBC 驱动程序需要轮询数据(例如 Postgres Pub/Sub 通知),而在 R2DBC 中,可以在没有轮询线程的情况下使用通知流,因为所有 I/O 基于监听接收缓冲区并在驱动程序接收到数据后发出数据。相比之下,JDBC(几乎所有命令式 API)需要有人调用方法来 consume/obtain 数据。

我不确定 CDC 如何与 MySQL 一起工作;我认为您需要使用 MySQL 命令或 MySQL 协议扫描(轮询)BINLOG。目前,R2DBC MySQL 驱动程序不支持 BINLOG 轮询。

Postgres 具有类似的功能(逻辑解码)。 R2DBC Postgres 支持它(参见 Logical Decode using R2DBC Postgres 的文档)。在 Postgres 中,服务器将复制日志推送到客户端,这为您提供了一个热流,因为逻辑解码订阅了复制日志。

要点主要取决于实际的数据库技术。