使用 Debezium 审核数据更改

Audit data changes with Debezium

我有一个用例,我想审计数据库 table 数据更改到另一个 table 以实现合规性目的。首先,应该审核对数据的任何更改,例如 Inserts/Updates/Deletes。我发现了不同的选项,例如 JaVersHibernate Envers数据库触发器Debezium .

我避免使用 JaVers 和 Hibernate Envers,因为这不会捕获通过直接 SQL 查询发生的任何数据更改以及通过其他应用程序发生的任何数据更改。我看到的另一个问题是我们需要将与审计相关的代码添加到同一事务边界中的主应用程序代码。

我也避免使用数据库触发器,因为我们根本没有为任何部署使用触发器。

然后我离开了 Debezium,这很有前途。但是,我唯一担心的是我们需要使用 Kafka 来利用 Debezium。 如果主 table 和审计 table 位于同一个数据库实例中,是否需要使用 Kafka 才能使用 Debezium?

Debezium 非常适合审计,但鉴于它是源连接器,它仅代表您用例中数据管道的一部分。您将捕获每个 table 更改事件(c=create、r=read、u=update、d=delete),将其存储在 Kafka 主题或本地磁盘上,然后您需要一个 Sink Connector(即 Camel Kafka SQL 或 JDBC, kafka-connect-jdbc) 插入目标 table.

对于相同的事务边界要求,您可以使用作为项目一部分的 Outbox Pattern if the eventual consistency is fine. There is also an Outbox Event Router SMT 组件。

请注意,Debezium 也可以 运行 embedded in a standalone Java application,将偏移量存储在本地磁盘上,但是您会失去 KafkaConnect 运行ning 在分布式模式下提供的 HA 功能。使用嵌入式模式,您还可以从配置驱动方法切换到代码驱动方法。