有没有一种方法可以使用 Apache Beam 作业中的同步拉取来使用 Google PubSub 消息

问题描述

我已经在下面的文档中浏览了谷歌提供的客户端库。给定的客户端库只是轮询来自 PubSub 的消息,但在我们创建无界源连接器之前它不会连续轮询。 https://cloud.google.com/pubsub/docs/pull#synchronous_pull

由于我尝试构建的源连接器是无界源,为此我需要处理检查点标记、实现 PubSub 阅读器、PubSub 拆分源并实现 ACK 和 NACK 逻辑,我相信这将花费大量时间是时候创建我自己的无界源连接器了。现在 PubSubIO(Beam api) 只支持异步拉取。那么有什么方法可以在Apache Beam提供的PubSubIO api之上实现ACK n NACK逻辑逻辑。有没有已经开发的api更适合这种用例。

通过同步拉取,您可以在任何解析失败的情况下确认预期的消息并否认消耗的消息。

解决方法

您期望的功能不存在,也不应该存在。

当前行为,异步拉取,获取消息,一旦消息被持久化(在工作线程或管道中的接收器中,两者中的第一个),消息就是 ACK。

在您的情况下,您希望根据管道处理手动确认消息。但是,您是limited to 10 minutes to ACK your messages with PubSub。想象一下,如果您构建一个窗口为 15 分钟(或更多)的管道。您需要等待窗口处理结束以确认消息;不可能!

就您而言,正确的设计是管理管道中的错误。