Google cloud platform 如何使用GCP平台流式处理事件?

Google cloud platform 如何使用GCP平台流式处理事件?,google-cloud-platform,google-cloud-pubsub,event-stream,Google Cloud Platform,Google Cloud Pubsub,Event Stream,我正在研究构建一个简单的解决方案,其中producer services将事件推送到消息队列,然后让流式服务通过gRPC流式API提供这些事件 云发布/订阅似乎非常适合这项工作,但扩展流媒体服务意味着,该服务的每个副本都需要创建自己的订阅并在缩减之前删除,这似乎不必要地复杂,而不是该平台的目的 另一方面,Kafka似乎可以很好地处理类似的问题,但我希望避免管理底层平台本身,而是利用云基础设施 我还应该提到,使用流式API的原因是允许向前端(可能无法访问底层基础设施)进行流式传输 有没有更好的方法

我正在研究构建一个简单的解决方案,其中producer services将事件推送到消息队列,然后让流式服务通过gRPC流式API提供这些事件

云发布/订阅似乎非常适合这项工作,但扩展流媒体服务意味着,该服务的每个副本都需要创建自己的订阅并在缩减之前删除,这似乎不必要地复杂,而不是该平台的目的

另一方面,Kafka似乎可以很好地处理类似的问题,但我希望避免管理底层平台本身,而是利用云基础设施

我还应该提到,使用流式API的原因是允许向前端(可能无法访问底层基础设施)进行流式传输


有没有更好的方法可以在GCP平台上执行类似操作,而不必部署和管理我自己的基础设施?

如果您基本上想要临时订阅,那么在创建订阅时可以在对象上设置以下几项:

  • 过期\u策略
    设置为较短的持续时间。当订阅服务器在该时间段内未收到消息时,订阅将被删除。折衷的办法是,如果您的订阅服务器由于持续时间超过此时间的暂时性问题而停机,则订阅将被删除。默认情况下,过期时间为31天。您可以将此设置为低至1天。对于pull订阅服务器,订阅服务器只需停止向云发布/订阅发出请求,以便在其到期时启动计时器。对于推送订阅,计时器根据没有消息成功传递到端点时启动。因此,如果没有发布消息,或者如果端点返回所有推送消息的错误,则计时器有效

  • 减少
    消息保留时间的值
    。这是订阅者未接收消息并进行确认时保留消息的时间段。默认情况下,这是7天。您可以将其设置为低至10分钟。折衷的办法是,如果您的订阅者断开连接或延迟处理消息的时间超过此持续时间,则早于此时间的消息将被删除,订阅者将看不到它们

  • 完全关闭的订阅服务器可能只调用DeleteSubscription本身,以便订阅立即消失,但对于意外关闭的订阅服务器,设置这两个属性将最大限度地减少订阅继续存在的时间和消息数(这些消息将永远无法传递)这将被保留


    请记住,每个主题和每个项目只能订阅1到10000份。因此,如果创建了大量订阅,并且这些订阅处于活动状态或未清除状态(手动或在
    过期\u policy
    ttl
    过期后自动),则可能无法创建新订阅

    我不确定我是否遵循了扩展说明,云发布订阅允许同一订阅上的多个订阅者上下扩展吞吐量,您的确切意思是什么?gRPC流媒体服务的想法是流式传输进入发布主题的所有事件。如果同一服务的两个实例都订阅了相同的订阅,这意味着它们各自将接收大约50%的传入事件,这意味着在这两个实例中的任何一个上调用API的任何人将只接收一半的事件。为了使流媒体服务正常工作,每个实例需要接收100%的事件,这意味着它们不能订阅相同的订阅。也许我弄错了?当你说“这似乎不必要地复杂,而不是平台的用途”时,你指的是哪个“平台”?云发布/订阅中的订阅本质上相当于卡夫卡中的消费者群体。您看到这两者之间有什么主要区别吗?听起来好像您希望每个实例跟踪所有事件,如果您添加实例以增加查询容量,您可能希望将职责与CQR分开(即查询节点查询数据存储和接收节点将事件推入其中)@KamalAboul Hosn我指的是为服务的每个实例动态生成一个新的订阅,该订阅基本上是短暂的消息,并确保在实例发生故障时删除订阅,这样就不需要花钱。在kafka中,我可以只设置一个主题并附加单独的订阅者,每个订阅者都可以独立跟踪队列中自己的偏移量。感谢您提供的提示,这正是我现在正在做的事情(除了设置过期时间,因为Go API还不支持这一点)。由于pubsub的工作方式,而不是解决这类问题的正确方式,这感觉像是一种变通方法。我想GCP目前提供的服务没有其他方法可以解决这个问题?