GCP Pubsub 主题持续时间中存在的消息数
Posted
技术标签:
【中文标题】GCP Pubsub 主题持续时间中存在的消息数【英文标题】:GCP Pubsub topic number of messages present in a duration 【发布时间】:2020-03-22 17:47:23 【问题描述】:请帮助我了解 Google 云 Pubsub subscription/num_undelivered_messages 指标与拉取订阅的功能。
来自文档:subscription/num_undelivered_messages 是
未确认消息(也称为积压消息)的数量 订阅。每 60 秒采样一次。采样后数据不 最长可见 120 秒。
对于从文档中提取交付
在拉取交付中,您的订阅者应用程序发起请求 Cloud Pub/Sub 服务器来检索消息。订阅 应用程序显式调用请求消息的 pull 方法 送货上门。
现在,我针对名为 projects/pubsub-public-data/topics/taxirides-realtime 的 Google 公共主题设置了一个拉取订阅,该主题旨在持续提供出租车乘车数据流。
现在我的要求是计算过去 1 小时内乘坐出租车的次数。我想到的常用方法是从主题中提取所有消息并对其执行聚合。
但是,在搜索时,我发现这两个链接 link1 和 link2 我觉得可以解决问题,但下面的问题 1 仍然是对这个解决方案的怀疑,让我感到困惑!
所以总的来说我的问题是 1. 发布订阅如何从主题中找到 num_undelivered_messages 的值,即使订阅没有进行任何拉取调用?实际上,我可以通过过滤订阅 ID 在堆栈驱动程序监控中看到这个指标。
-
在特定持续时间内计算主题中存在的消息总数的正确方法是什么?
【问题讨论】:
【参考方案1】:未传递消息的数量是根据创建订阅的时间确定的。之后发布的任何消息都是应该传递给订阅的消息。因此,订阅未提取和确认的任何这些消息都将计入num_undelivered_messages
。
为了解决您的特定问题,最好阅读提要并汇总数据。像num_undelivered_messages
这样的统计数据对于检查订阅者的健康状况很有用,例如,如果计数正在增加,它可能表明订阅者有问题或者发布的数据发生了某种变化。您可以查看所需时间间隔结束与开始之间的数量差异,以获取在该时间范围内发布的消息数量的估计,假设您没有同时消费和确认任何消息。
但是,请务必记住,此 Feed 中发布消息的时间可能与发生出租车行程的时间不完全一致。想象一下,发布者出了问题,它在一段时间内无法发布消息,然后一旦修复,就发布了在此期间建立的所有消息。在这种情况下,消息中指示出租车何时发生的时间戳与 Cloud Pub/Sub 收到消息的时间不匹配。
【讨论】:
谢谢@Kamal Aboul-Hosn。解释非常有帮助。关于寻找差异的观点。此处提到的示例cloud.google.com/monitoring/custom-metrics/… 是否可以针对此用例进行修改? 例如,通过以小时差传递开始和结束时间并将指标类型更改为“metric.type =”pubsub.googleapis.com/subscription/num_undelivered_messages“和resource.label.subscription_id =”订阅名称“'”和对齐到 ALIGN_SUM?实际上,我运行了这个修改后的程序,并且与堆栈驱动程序监控图与程序相比,度量值有很大差异。例如,当stackdriver 显示38M 时,我的程序显示30M。你能推荐一下吗? 我不认为 ALIGN_SUM 是你想要的。它将显示区间中点的总和。我发现有效的方法是将对齐器设置为 ALIGN_NEXT_OLDER,对齐周期设置为 3600 秒,并将开始和结束时间设置为相隔一小时。您将取回两个数据点,然后计算这两者之间的差异。 按照建议我尝试了 ALIGN_NEXT_OLDER 但它只返回 1 个数据点。以上是关于GCP Pubsub 主题持续时间中存在的消息数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 apache camel 中执行 gcp pubsub 消息的并行处理