簡體   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