我们使用Debezium作为PostgreSQL(实际上是RDS)的更改数据捕获连接器。
如果由于任何原因,debezium连接器出现终端故障,WAL将继续增长,直到debezium被修复或服务器耗尽存储空间。
有没有可能对WAL可以增长的大小设置限制?
我已经研究了https://postgresqlco.nf/doc/en/param/max_wal_size/,不相信它能满足我们的需要。
基本架构为:
活动> Postgres > debezium >活动
在理想的情况下,如果WAL达到了一个极限,那么事件命中postgres将出错,因为WAL日志无法写入。在恢复debezium并拾取WAL日志时,它应该读取/清除并继续处理新事件。
谢谢你的帮助。
2条答案
按热度按时间gzszwxb41#
只需将PostgreSQL配置参数
max_slot_wal_keep_size
设置为您希望保留的WAL限制。如果超过了该大小,PostgreSQL将删除WAL,您将不得不重建复制。kmpatx3s2#
如果我理解正确的话,没有办法对WAL大小设置限制。只要有一个活动(修改)在您的数据库中,wal日志将产生;否则数据库进程将停止。唯一的限制当然是存储大小,但如果你达到了我提到的限制,数据库将停止。这是我对你问题的回答。
除了你的问题,我不知道Debezium是如何工作的,但在Oracle GoldenGate中有一个叫做数据泵的概念。为了处理这种情况,如果数据库服务器上有严格的存储限制,您需要将CDC日志传输到目标服务器或另一台服务器。之后,Debezium需要从文件中读取并在目标端应用或流式传输更改(如果Debezium中有类似的方法)。因此,CDC复制/流不是直接从数据库服务器到目标。它应该是从数据库服务器到文件,然后从文件到目标。