我有一个 Apache Beam 管道,当与
Wait.on
一起使用 JdbcIO
转换时,它会无限期地卡住。这是我的代码的简化版本,着重于相关部分:
PCollection<String> result = p.
apply("Pubsub", PubsubIO.readMessagesWithAttributes().fromSubscription(/*...*/))
.apply("Transform", ParDo.of(new MyTransformer()));
PCollection<Void> insert = result.apply("Inserting",
JdbcIO.<String>writeVoid()
.withDataSourceProviderFn(/*...*/)
.withStatement(/*...*/)
.withPreparedStatementSetter(/*...*/)
);
result.apply(Wait.on(insert))
.apply("Selecting", new SomeTransform())
.apply("PubsubMessaging", ParDo.of(new NextTransformer()));
p.run();
在代码中,我使用
Wait.on
转换让管道等待 insert
转换(使用 JdbcIO 写入数据)完成,然后再执行下一步。然而,管道卡住了,没有进一步进展。
我尝试在我的转换中添加日志消息以跟踪进度并确定卡住的位置,但我无法查明问题所在。我还查看了关于该主题的多个 Stack Overflow 帖子,但没有一个为我的问题提供成功的解决方案。
任何人都可以就如何调试和解决我的 Apache Beam 管道中涉及
Wait.on
和 JdbcIO 的问题提供任何见解或建议吗?