我有一个用例,为了遵从性的目的,我想审计另一个表中的DB表数据更改。首先,应该审计对数据的任何更改,如插入/更新/删除。我找到了不同的选项,比如
JaVers
Hibernate Envers
数据库触发器
,以及
Debezium
..。
我避免使用JaVers和Hibernate Envers,因为这不会捕获通过直接SQL查询发生的任何数据更改以及通过其他应用程序发生的任何数据更改。我看到的另一个问题是,我们需要将与审计相关的代码添加到同一事务边界中的主应用程序代码中。
我也在避免使用数据库触发器,因为我们根本没有在任何部署中使用触发器。
然后我带着Debezium离开了,它很有前途。但是,我唯一担心的是我们需要使用Kafka来利用Debezium。
如果主表和审计表都位于同一个DB实例中,Kafka的用法是否需要使用Debezium?
发布于 2021-03-01 15:13:23
Debezium非常适合审计,但是考虑到它是一个源连接器,它在您的用例中只代表了数据管道的一部分。您将捕获每个表更改事件(c=create、r=read、u=update、d=delete),将其存储在Kafka主题或本地磁盘上,然后您需要一个Sink Connector (例如,Camel Kafka SQL或JDBC,kafka-connect-jdbc)来插入到目标表中。
对于相同的事务边界要求,您可以使用
发件箱模式
如果最终的一致性是好的。还有一个
发件箱事件路由器SMT
组件,该组件是项目的一部分。
注意,Debezium也可以运行
嵌入到独立的Java应用程序中
,将偏移量存储在本地磁盘上,但会丢失分布式模式下运行的KafkaConnect所提供的HA能力。使用嵌入式模式,您还可以从配置驱动的方法切换到代码驱动的方法。
https://stackoverflow.com/questions/66413907
复制相似问题