【发布时间】:2021-04-13 05:53:32
【问题描述】:
我在 GCP 中有一个 IoT 管道,其结构如下:
IoT Core -> Pub/Sub -> Dataflow -> BigQuery
我正在使用 esp32 设备发送数据,每 2 秒发送一次新数据。目前我只测试 4 台设备,但最终该项目将包含数百个 esp32 设备,每个设备每 2 秒发送一次数据。问题是即使有 4 台设备,订阅中未确认的消息数也会达到 1260 条。即使这些消息没有丢失,它们只是被延迟了,当我不得不使用数百个设备时,这最终可能会导致问题。所以我需要改变我的管道,以便可以成功存储数据而不会出现这样的延迟。发送的数据为 csv 格式。它使用 Javascript UDF 在 Dataflow 中转换为 JSON,然后使用 google 定义的模板上传到 Bigquery: Pub/Sub to BigQuery 。所有设备都使用相同的 Pub/Sub 主题和订阅。所有设备的数据都上传到同一个 BigQuery 表中。如果有帮助,那么也可以先将数据存储在 Cloud Storage 等其他地方(如果这样更快),然后稍后(每隔一小时或其他时间)将所有数据上传到 BigQuery,但最终我需要所有数据在 BigQuery 中。请建议我如何改进我的管道。
【问题讨论】:
-
你有什么问题?时机?延误?顺序?
-
延迟。如果我检查订阅,当我只使用 4 台设备时,它有大约 1260 条未确认的消息。当我最终使用数百台设备时,这个数字最终会变得非常大。
-
您预计会有多长时间的延迟?你看看数据流管道吗?工人是否足以处理流程?
-
我预计如果有 100 台设备,Pub/Sub 中将有大约 30000 条未确认的消息。即使在管道中最多允许 3 名工作人员,也只有一名工作人员处于活动状态。如何确定延迟是由于数据流还是 BigQuery?我认为问题可能在于所有设备都在尝试写入同一个 BigQuery 表。
-
我只想问:管道成功了吗?没有错误,并且数据显示在 BigQuery 中?
标签: google-cloud-platform google-bigquery google-cloud-dataflow google-cloud-pubsub