Java 使用 PubsubIO 时出现 OutOfMemoryError

Java OutOfMemoryError using PubsubIO

我正在 Java 中编写一个简单的数据流管道: PubsubIO -> ConvertToTableRowDoFn -> BigQueryIO

管道正在运行——数据按预期到达 BigQuery——但我在 Dataflow 工作日志中看到 OutOfMemoryErrors。

我尝试的一个实验是通过添加 Thread.sleep(100) 来减慢 ConvertToTableRowDoFn。我原以为这会使 BigQueryIO 的批处理大小变小,但令我惊讶的是,这使 OutOfMemoryErrors 更频繁!

这让我觉得 PubsubIO 中的某些东西读取数据太快或做太多缓冲。有关如何调查此问题的任何提示,或有关 PubsubIO 如何在 Google 数据流环境中进行缓冲的指示?

使用 FILE_TRIGGERING_RECORD_COUNT = 100000 而不是 500000 重新编译了 beam,此后我们没有看到任何 OOM。