繁体   English   中英

获取 Google Cloud PubSub 中单条消息的大小

[英]Get the size of a single message in Google Cloud PubSub

我有一个设置,我将消息发布到Google Cloud PubSub服务。

我希望获得要发布到 PubSub 的每条消息的大小 因此,为此,我确定了以下方法(注意:我使用 Python 客户端进行发布和订阅,遵循文档中介绍的逐行实现):

  • 使用“监控”功能从 Google Cloud Console 查看消息计数
  • 创建一个请求订阅客户端并使用回调 function 中的message.size查看从请求主题中提取的消息的大小。
  • 通过根据PubSub 消息模式并使用sys.getsizeof()将消息转换为 JSON 在发布之前估计消息的大小

对于如下示例消息,我使用 Python 发布者客户端发布:

{
  "data": 'Test_message',
  "attributes": {
    'dummyField1': 'dummyFieldValue1',
    'dummyField2': 'dummyFieldValue2'
  }
}

,我从订阅客户端中的以下回调 function 中得到了 101 作为message.size output 的大小:

def callback(message):
    print(f"Received {message.data}.")
    if message.attributes:
        print("Attributes:")
        for key in message.attributes:
            value = message.attributes.get(key)
            print(f"{key}: {value}")
    print(message.size)
    message.ack()

而 Cloud Console Monitoring 上显示的大小约为 79 B。 在此处输入图像描述

所以这些是我的问题:

  • 为什么同一条消息的大小不同?
  • message.size的 output 是否以字节为单位?
  • 如何在使用 python 客户端发布之前查看消息的大小?
  • 如何在 Cloud Console 上查看单个消息的大小,而不是在给定时间范围内的大小聚合度量,我可以在“监控”部分找到?

为了进一步为社区做出贡献,我将我们的讨论总结为答案。

  1. 关于message.size ,它是订阅者客户端中消息的属性。 另外,根据文档,它的定义是:

返回底层消息的大小,以字节为单位

因此,您将无法在发布之前使用它。

  1. 另一方面, message_size是 Google Cloud Metrics 中的一个指标,供 Cloud Monitoring 使用, 此处为 。

最后,讨论的最后一个主题是您的目标是监控您的配额支出,以便您可以留在免费套餐中。 出于这个原因,最好的选择是使用 Cloud Monitoring 并根据pubsub.googleapis.com/topic/byte_cost等指标设置警报。 以下是一些链接,您可以在其中找到更多相关信息:配额利用率基于警报事件的警报策略

关于您在发布前查看消息大小的第三个问题,可计费消息大小是消息数据、属性(键加值)、时间戳的 20 个字节和message_id的一些字节的总和。 请参阅Cloud Pub/Sub 定价指南。 请注意,无论消息大小如何,至少 1000 字节都是可计费的,因此如果您的消息可能小于 1000 字节,那么拥有良好的批处理设置很重要。 message_id是在服务器端分配的,不保证一定大小,但它是由发布调用作为未来返回的,因此您可以查看示例。 这应该允许您在发布者客户端中获得相当准确的消息成本估计。 请注意,您还可以使用监控客户端库从 Python 客户端中读取 Cloud Monitoring 指标。

关于您的第四个问题,无法从分布指标中提取单个数据点(除非您在查询的时间段内仅发布了一条消息,在这种情况下,平均值会告诉您该消息的大小)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM