在 Debezium 中过滤读取访问事件

Filter read access events in Debezium

我们正在使用 Debezium + PostgreSQL。

请注意,我们有 4 种类型的事件用于创建、读取、更新和删除 - c、r、u 和 d。

读取类型的事件未用于我们的应用程序。实际上,除非我们正在审计或镜像交易活动,否则我想不出 'r' 事件的用例。

我们在扩展方面遇到困难,我怀疑这是因为网络被读取类型的事件占用了。

我们如何在 postgreSQL 本身中过滤掉那些事件?

我从一位贡献者那里得到了使用 snapshot.mode 的线索。我想当 Debezium 创建快照时必须做一些事情。我不知道该怎么做。

您的数据库可能已经存在了一段时间,并且包含已从逻辑解码日志中清除的数据和更改。如果您随后开始使用 Debezium PostgreSQL 连接器开始将更改捕获到 Kafka 中,那么问题就变成了 Kafka 中事件的消费者应该能够看到什么。

一种情况是消费者应该能够看到数据库中所有行的事件,即使是那些在 CDC 启动之前就存在的行。例如,这允许消费者完全 reproduce/replicate 所有现有数据 随着时间的推移保持数据同步。为实现这一点,Debezium PostgreSQL 连接器启动时可以先创建数据库内容的快照,然后再开始捕获更改。这是自动完成的,因此即使快照过程需要一段时间 运行,连接器仍会看到自快照过程启动以来发生的所有事件。这些事件表示为 "read" 事件,因为实际上连接器只是读取现有的行。但是,它们与 "insert" 事件相同,因此任何应用程序都可以以相同的方式处理读取和插入。

另一方面,如果 Kafka 中事件的消费者不需要查看所有现有行的事件,则可以配置连接器以避免快照并而是从捕捉变化开始。这在某些不需要在 Kafka 中找到整个数据库状态的场景中可能很有用,但目标是简单地捕获正在发生的更改。

Debezium PostgreSQL 连接器将以任何一种方式工作,因此您应该使用适合您使用事件的方式的方法。