您可以使用 Google Pub Sub 批量拉取消息吗?
Can you do batch pull messages with Google Pub Sub?
正在尝试优化我们的应用程序,但正在进行批量拉取。 Pub Sub 似乎允许使用不同的客户端节点一次异步拉取一条消息,但是单个节点是否无法从 pub sub 进行批量拉取?
Streaming Pull 和 Pull RPC 都只允许订阅者一次消费一条消息。现在,看起来我们必须一次提取一条消息并进行应用程序级批处理。
任何见解都会有所帮助。总的来说,这个 GCP 很新。
底层拉取和流式拉取操作可以在同一个响应中接收批量消息。使用流式拉取的 Cloud Pub/Sub client library 将这些批次分开,并一次将它们交给提供的用户回调。因此,您无需担心优化消息的底层接收。
如果您关心的是在应用程序级别优化订阅者代码,例如,您想批量写入数据库,那么您有几个选择:
直接使用Pull,这样可以一次处理一批中的所有消息。请注意,有效地使用拉取需要许多同时未完成的拉取请求并立即用新请求替换 return 的请求。
在您的用户回调中,重新批处理消息,一旦批处理达到所需大小(或者您已经等待了足够长的时间来填充该批处理),一起处理所有消息然后确认它们。
您可能可以使用 Dataflow (Apache Beam) 来实现它。您可以有一个 运行 流作业,您可以在其中分组 window,根据您的要求转换消息。处理结果可以批量保存或进一步蒸。如果消息数量非常大,这可能是有意义的。
正在尝试优化我们的应用程序,但正在进行批量拉取。 Pub Sub 似乎允许使用不同的客户端节点一次异步拉取一条消息,但是单个节点是否无法从 pub sub 进行批量拉取?
Streaming Pull 和 Pull RPC 都只允许订阅者一次消费一条消息。现在,看起来我们必须一次提取一条消息并进行应用程序级批处理。
任何见解都会有所帮助。总的来说,这个 GCP 很新。
底层拉取和流式拉取操作可以在同一个响应中接收批量消息。使用流式拉取的 Cloud Pub/Sub client library 将这些批次分开,并一次将它们交给提供的用户回调。因此,您无需担心优化消息的底层接收。
如果您关心的是在应用程序级别优化订阅者代码,例如,您想批量写入数据库,那么您有几个选择:
直接使用Pull,这样可以一次处理一批中的所有消息。请注意,有效地使用拉取需要许多同时未完成的拉取请求并立即用新请求替换 return 的请求。
在您的用户回调中,重新批处理消息,一旦批处理达到所需大小(或者您已经等待了足够长的时间来填充该批处理),一起处理所有消息然后确认它们。
您可能可以使用 Dataflow (Apache Beam) 来实现它。您可以有一个 运行 流作业,您可以在其中分组 window,根据您的要求转换消息。处理结果可以批量保存或进一步蒸。如果消息数量非常大,这可能是有意义的。