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

     2023-02-16     73

关键词:

【中文标题】获取 Google Cloud PubSub 中单条消息的大小【英文标题】:Get the size of a single message in Google Cloud PubSub 【发布时间】:2021-05-18 06:00:34 【问题描述】:

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

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

使用“Monitoring”功能从 Google Cloud Console 查看消息计数 创建一个pull subscription client 并在回调函数中使用message.size 查看从请求主题中提取的消息的大小。 估计publishing 之前的消息大小,方法是按照PubSub message schema 将它们转换为JSON 并使用sys.getsizeof()

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


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

,我从订阅客户端中的以下回调函数中得到message.size 输出的大小为101:

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 监控上显示的大小约为 79 B。

所以这些是我的问题:

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

【问题讨论】:

根据documentation,message.sizeReturn the size of the underlying message, in bytes的一个属性。关于您关于 message_sizes 值的问题,该指标表示Distribution of publish message sizes (in bytes). It is Sampled every 60 seconds. After sampling, data is not visible for up to 240 seconds、link。你能告诉我你想在发布之前检查消息大小的原因吗? 另外,message.size 和 'message_sizes`(如上所述)能否满足您的需求? @AlexandreMoraes 我想知道正在发布的消息的大小,以便在指定天数内以指定速率发布消息时估计数据流。这反过来又可以估计它的成本,以及它是否会保持在免费套餐内。 根据 Python 库文档,您只有 message.size 作为订阅者的消息属性。否则,您将不得不使用 Cloud Monitoring 和警报,如果您想监控配额支出,这将非常有用。所有这些信息对您有帮助吗? 是的,请。这样就好了。 【参考方案1】:

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

    关于message.size,它是来自订阅者客户端消息的属性。另外,根据documentation,其定义为:

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

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

    另一方面,message_size 是 Google Cloud Metrics 中的一个指标,供 Cloud Monitoring here 使用。

最后,讨论的最后一个主题是您的目标是监控您的配额支出,这样您就可以留在免费套餐中。因此,最好的选择是使用 Cloud Monitoring 并根据 pubsub.googleapis.com/topic/byte_cost 等指标设置警报。以下是一些链接,您可以在其中找到更多相关信息:Quota utilisation、Alert event based、Alert Policies。

【讨论】:

【参考方案2】:

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

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

【讨论】:

感谢您的信息!

Google Cloud PubSub - 似乎无法获取主题

】GoogleCloudPubSub-似乎无法获取主题【英文标题】:GoogleCloudPubSub-can\'tseemtogettopics【发布时间】:2015-10-1512:37:54【问题描述】:我正在使用heroku运行一个node.js应用程序,该应用程序使用gcloud创建一个主题,然后订阅它。我正在使... 查看详情

google.cloud.pubsub_v1 和 google.cloud.pubsub 有啥区别?

】google.cloud.pubsub_v1和google.cloud.pubsub有啥区别?【英文标题】:Whatisthedifferencebetweengoogle.cloud.pubsub_v1andgoogle.cloud.pubsub?google.cloud.pubsub_v1和google.cloud.pubsub有什么区别?【发布时间】:2018-06-2005:04:42【问题描述】:我看到两者都在Goo... 查看详情

如何使用 Google PubSub 确认 (@google-cloud/pubsub)

】如何使用GooglePubSub确认(@google-cloud/pubsub)【英文标题】:HowtoACKusingGooglePubSub(@google-cloud/pubsub)【发布时间】:2018-06-2203:54:42【问题描述】:使用这个例子:https://cloud.google.com/nodejs/getting-started/using-pub-sub完全按照这个例子,消息... 查看详情

Google Cloud Function - ImportError:无法从“google.cloud”(未知位置)导入名称“pubsub”

】GoogleCloudFunction-ImportError:无法从“google.cloud”(未知位置)导入名称“pubsub”【英文标题】:GoogleCloudFunction-ImportError:cannotimportname\'pubsub\'from\'google.cloud\'(unknownlocation)【发布时间】:2019-02-2608:49:40【问题描述】:我正在部署一... 查看详情

使用 Google Cloud PubSub 不断收到“向 Cloud PubSub 发送测试消息时出错...”

】使用GoogleCloudPubSub不断收到“向CloudPubSub发送测试消息时出错...”【英文标题】:Keepgetting\'ErrorsendingtestmessagetoCloudPubSub...\'withGoogleCloudPubSub【发布时间】:2015-11-1005:14:03【问题描述】:我正在尝试将Google的推送PubSub设置到我的... 查看详情

如何在 Google.Cloud.PubSub.V1 SubscriberServiceApiClientBuilder 中配置频道选项

】如何在Google.Cloud.PubSub.V1SubscriberServiceApiClientBuilder中配置频道选项【英文标题】:HowtoconfigurechanneloptionsinGoogle.Cloud.PubSub.V1SubscriberServiceApiClientBuilder【发布时间】:2021-05-1410:06:53【问题描述】:在Google.Cloud.PubSub.V1版本1.x.x 查看详情

为 Google PubSub 暂停 Spring Cloud StreamListener

】为GooglePubSub暂停SpringCloudStreamListener【英文标题】:PausingSpringCloudStreamListenerforGooglePubSub【发布时间】:2021-06-0516:44:26【问题描述】:我们使用SpringCloudStream(版本3.0.7)StreamListener从主题“A”的Google云PubSub订阅“A.SUB”中消费。... 查看详情

google cloud pubsub ImportError:无法导入名称类型

】googlecloudpubsubImportError:无法导入名称类型【英文标题】:googlecloudpubsubImportError:cannotimportnametypes【发布时间】:2018-12-1107:14:05【问题描述】:我使用google-cloud-pubsub为标准环境在python上为Googleappengine编写了一个小程序。我收到... 查看详情

Google Cloud IoT Core 和 Pubsub 定价?

】GoogleCloudIoTCore和Pubsub定价?【英文标题】:GoogleCloudIoTCoreandPubsubPricing?【发布时间】:2020-05-2517:44:18【问题描述】:我正在为我的IoT设备使用googleIoT核心和pubsub服务。我正在使用pubsub将数据发布到数据库。但我认为将每个数据... 查看详情

通过 Google Cloud Dataflow 将 PubSub 消息插入 BigQuery

】通过GoogleCloudDataflow将PubSub消息插入BigQuery【英文标题】:InsertPubSubmessagesintoBigQuerythroughGoogleCloudDataflow【发布时间】:2015-12-1410:57:58【问题描述】:我想使用GoogleCloudDataflow将来自某个主题的PubSub消息数据插入到BigQuery表中。一... 查看详情

Google Cloud PubSub 不确认消息

】GoogleCloudPubSub不确认消息【英文标题】:GoogleCloudPubSubnotackmessages【发布时间】:2019-07-0223:38:09【问题描述】:我们有基于GCPPubSub的发布者和订阅者系统。订阅者处理单个消息的时间很长,大约1分钟。我们已经将订阅者确认截... 查看详情

Google Cloud PubSub - 列出自定义属性的更好方法?

】GoogleCloudPubSub-列出自定义属性的更好方法?【英文标题】:GoogleCloudPubSub-betterwaytolistcustomattributes?【发布时间】:2021-08-3122:20:50【问题描述】:我正在尝试简化将数据发布到PubSub的Python代码。这有效:importosfromgoogle.cloudimportpubs... 查看详情

Google Cloud PubSub:如何仅读取最新记录

】GoogleCloudPubSub:如何仅读取最新记录【英文标题】:GoogleCloudPubSub:Howtoreadonlylatestrecords【发布时间】:2020-01-0808:17:03【问题描述】:在Kafka中有2个设置earliest和latest,您可以从主题的最早偏移量(0)或最新事件(对实时有用)进行... 查看详情

Google Cloud Platform:无法从 Container Engine 访问 Pubsub

】GoogleCloudPlatform:无法从ContainerEngine访问Pubsub【英文标题】:GoogleCloudPlatform:cannotaccessPubsubfromContainerEngine【发布时间】:2017-04-2603:36:28【问题描述】:我正在尝试从在GoogleContainerEngine中运行的Scala应用程序(即在Kubernetes中运行... 查看详情

如何从 google-cloud-platform vminstance 中的 pubsub 回调函数调用全局变量?

】如何从google-cloud-platformvminstance中的pubsub回调函数调用全局变量?【英文标题】:Howtocallaglobalvariablefromapubsubcallbackfunctioningoogle-cloud-platformvminstance?【发布时间】:2019-03-2709:15:24【问题描述】:我正在运行一个神经网络模型,该... 查看详情

使用 GCloud 模拟器的 Google Cloud PubSub V1

】使用GCloud模拟器的GoogleCloudPubSubV1【英文标题】:GoogleCloudPubSubV1usingGCloudEmulator【发布时间】:2019-03-1411:09:45【问题描述】:我正在与GoogleDocs争夺使用PubSub模拟器通过.NET设置CloudPubSub。https://cloud.google.com/dotnet/docs/getting-started/usi... 查看详情

来自 PubSub 主题的 Google Cloud 函数触发器是订阅吗

】来自PubSub主题的GoogleCloud函数触发器是订阅吗【英文标题】:IsGoogleCloudFunctionTriggerfromPubSubTopicaSubscription【发布时间】:2018-12-1411:21:59【问题描述】:我在GCC中有两个具有类似设置的环境。由PubSub主题触发的云函数。在这两个... 查看详情

如何通过 terraform 使用服务帐户创建 google cloud pubsub pull 订阅?

】如何通过terraform使用服务帐户创建googlecloudpubsubpull订阅?【英文标题】:Howtocreateagooglecloudpubsubpullsubscriptionswithserviceaccountbyterraform?【发布时间】:2021-10-1902:49:34【问题描述】:在google_pubsub_subscription的terraform文档中,它提到在... 查看详情