我有非常基本的 apache beam 管道,它在 GCP Dataflow 上运行并从 PubSub 读取一些数据,对其进行转换并将其写入 Postgres 数据库。所有这些都是通过 Apache Beam 的标准读取器/写入器组件完成的。问题是当我的管道开始接收大量数据时,我的 Postgres 端由于等待 ShareLocks 而出现死锁错误。
很明显,这种事情的发生是因为 Postgres 端溢出。我的管道试图一次写得太快和太多东西,所以为了避免这种情况,它应该放慢速度。因此,我们可以使用诸如背压之类的机制。我试图挖掘出有关 Apache Beam 背压配置的任何信息,不幸的是,官方文档似乎对此类问题只字未提。
我对以下类型的异常感到不知所措:
java.sql.BatchUpdateException: Batch entry <NUMBER>
<MY_STATEMENT>
was aborted: ERROR: deadlock detected
Detail: Process 87768 waits for ShareLock on transaction 1939992; blocked by process 87769.
Process 87769 waits for ShareLock on transaction 1939997; blocked by process 87768.
Hint: See server log for query details.
Where: while inserting index tuple (5997152,9) in relation "<MY_TABLE>" Call getNextException to see other errors in the batch.
我想知道是否有任何背压工具包或类似的东西可以帮助我在不编写自己的PostgresIO.Writer.
非常感谢。
守着一只汪
相关分类