您可以使用 Google Pub Sub 批量提取消息吗?

Posted

技术标签:

【中文标题】您可以使用 Google Pub Sub 批量提取消息吗?【英文标题】:Can you do batch pull messages with Google Pub Sub? 【发布时间】:2021-11-10 20:55:52 【问题描述】:

尝试优化我们的应用程序,但进行批量拉取。 Pub Sub 似乎允许使用不同的客户端节点一次异步拉取一条消息,但是单个节点没有办法从 pub sub 批量拉取吗?

Streaming Pull 和 Pull RPC 都只允许订阅者一次消费一条消息。现在,看起来我们必须一次提取一条消息并进行应用程序级批处理。

任何见解都会有所帮助。总的来说,这个 GCP 很新。

【问题讨论】:

【参考方案1】:

底层拉取和流拉取操作可以在同一个响应中接收批量消息。使用流式拉取的Cloud Pub/Sub client library 将这些批次分开,并一次将它们交给提供的用户回调。因此,您无需担心优化消息的底层接收。

如果您关心的是在应用程序级别优化订阅者代码,例如,您想批量写入数据库,那么您有两个选择:

    直接使用Pull,这样可以一次处理一批中的所有消息。请注意,有效地使用拉取需要许多同时未完成的拉取请求,并立即用新请求替换返回的请求。

    在您的用户回调中,重新批处理消息,一旦批处理达到所需的大小(或者您已经等待足够的时间来填充批处理),一起处理所有消息,然后确认它们。

【讨论】:

感谢您的回复!我们确实在尝试降低数据库的事务量,因此,我认为我们将不得不通过用户回调执行应用程序级别的批处理。【参考方案2】:

您可能可以使用 Dataflow (Apache Beam) 来实现它。您可以有一个正在运行的流式作业,您可以在其中根据您的要求对消息进行分组、窗口化、转换。处理结果可以分批保存或进一步蒸汽保存。如果消息的数量真的很大,这可能是有道理的。

【讨论】:

以上是关于您可以使用 Google Pub Sub 批量提取消息吗?的主要内容,如果未能解决你的问题,请参考以下文章

您可以在基于 Cloud Pub/Sub 队列的 Google App Engine 中触发自动缩放吗?

Google Cloud Pub/Sub Python SDK 一次检索单个消息

如何从 Dataflow 批量(有效)发布到 Pub/Sub?

从 Google Pub/Sub 调用 Google App Engine 端点

Google Cloud Functions 无法使用 Pub/Sub 死信主题

验证数据已发送到 GCP Pub/Sub