0

我们正在使用 Debezium + PostgreSQL。

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

我们的应用程序没有使用读取类型的事件。实际上,除非我们正在审计或镜像事务的活动,否则我无法想到“r”事件的用例。

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

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

我从其中一位贡献者那里得到了使用 snapshot.mode 的线索。我想当 Debezium 创建快照时必须做一些事情。我无法弄清楚如何做到这一点。

4

1 回答 1

3

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

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

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

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

于 2017-09-08T19:42:02.880 回答