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

Is there a way I can consume Google PubSub message using synchronous pull in Apache Beam job

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

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

使用同步拉取,您可以在任何解析失败的情况下确认预期的消息并拒绝使用的消息。

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

当前行为,异步拉取,获取消息,一旦消息被持久化(在管道中的 worker 或 sink 中,两者中的第一个),消息就是 ACK。

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

在您的情况下,正确的设计是管理管道中的错误。