Dataflow 是不是应该使用来自 Pub/Sub 主题或订阅的事件? [复制]
Posted
技术标签:
【中文标题】Dataflow 是不是应该使用来自 Pub/Sub 主题或订阅的事件? [复制]【英文标题】:Should Dataflow consume events from a Pub/Sub topic or subscription? [duplicate]Dataflow 是否应该使用来自 Pub/Sub 主题或订阅的事件? [复制] 【发布时间】:2019-10-11 05:11:07 【问题描述】:我希望使用 Dataflow 将事件从 PubSub 流式传输到 BigQuery。我看到在 GCP 中有两个模板可以做到这一点:一个是 Dataflow 从一个主题中读取消息;另一个是一个来自订阅。
在这里使用订阅而不是仅仅使用主题中的事件有什么好处?
【问题讨论】:
【参考方案1】:核心概念
主题:发布者向其发送消息的命名资源。
订阅: 一个命名资源,表示来自单个特定主题的消息流,将传递给订阅者 申请。
根据核心概念,区别很简单:
当您希望将消息从 Dataflow发布 到 Pub/Sub(实际上,对于给定主题)时,请使用 Topic。
如果您想使用来自 Dataflow 中 Pub/Sub 的消息,请使用 订阅。
因此,就您而言,请订阅。
更多信息:
请注意,Pub/Sub 使用自己的消息存储管理主题。但是,当您希望在 BigQuery 中也移动这些消息(并最终执行您自己的分析)时,Cloud Pub/Sub Topic to BigQuery 模板特别有用。
Cloud Pub/Sub 主题到 BigQuery 模板是一个流式传输管道 从 Cloud Pub/Sub 主题读取 JSON 格式的消息,并且 将它们写入 BigQuery 表。您可以快速使用模板 将 Cloud Pub/Sub 数据移动到 BigQuery 的解决方案。模板读取 来自 Cloud Pub/Sub 的 JSON 格式消息并将其转换为 BigQuery 元素。
https://cloud.google.com/dataflow/docs/guides/templates/provided-streaming#cloudpubsubtobigquery
免责声明:评论和意见是我自己的,而不是我雇主的观点。
【讨论】:
谢谢,@vdenotaris。我仍然不确定为什么在这种情况下有一个模板可以直接从 Dataflow 中的主题消费消息(请参阅cloud.google.com/dataflow/docs/guides/templates/…)? @RichAshworth Pub/Sub 使用消息存储来管理主题。但是,如果您希望将这些消息也保留在 BigQuery 中以供进一步分析(例如,即使在 ETL 作业之后),您提到的模板也会很有用。【参考方案2】:Topic to BigQuery 和 Subscription to BigQuery 模板都使用来自 Pub/Sub 的消息并将它们流式传输到 BigQuery。
如果您使用主题到 BigQuery 模板,Dataflow 会在后台为您创建一个订阅,该订阅会读取指定主题。如果您使用订阅 BigQuery 模板,则需要提供自己的订阅。
您可以使用 Subscription to BigQuery 模板来模拟 Topic to BigQuery 模板的行为,方法是创建多个订阅连接的 BigQuery 管道,从同一主题中读取数据。
对于新部署,首选使用订阅 BigQuery 模板。如果您使用 BigQuery 模板停止并重新启动管道,则会创建一个新订阅,这可能会导致您错过一些在管道关闭时发布的消息。订阅 BigQuery 模板没有这个缺点,因为即使在管道重新启动后它也使用相同的订阅。
【讨论】:
以上是关于Dataflow 是不是应该使用来自 Pub/Sub 主题或订阅的事件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
来自 Dataflow 的 BigQuery 流式插入 - 没有结果
Dataflow 何时确认来自 PubSubIO 的批处理项目消息?
如何防止来自 Cassandra 的 Dataflow 读取并行度降低
我们可以使用单个 Google Cloud Dataflow 将来自多个 Pubsub(源)的数据写入多个 GCS(接收器)吗?