我有非?;镜?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.非常感謝。
1 回答

守著一只汪
TA貢獻1872條經驗 獲得超4個贊
假設您使用JdbcIO
寫入 Postgres,您可以嘗試增加批處理大小(請參閱 參考資料withBatchSize(long batchSize)
),默認情況下為 1K 條記錄,這可能是不夠的。
此外,如果出現 SQL 異常,并且您想要重試,那么您需要確保使用正確的重試策略(參見 參考資料withRetryStrategy(RetryStrategy retryStrategy)
)。在這種情況下,FluentBackoff
將被應用。
添加回答
舉報
0/150
提交
取消