GCP 中的物联网管道
Posted
技术标签:
【中文标题】GCP 中的物联网管道【英文标题】:IoT pipeline in GCP 【发布时间】: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 中? 【参考方案1】:这个错误是因为每 10 秒后发布/订阅重新发送尚未确认的消息。这导致消息总数迅速增长,因为发送消息的设备数量和发送消息的速率已经非常高。所以我将这个等待时间增加到 30 秒,系统就平静下来了。现在,当我运行管道时,不会形成大量未确认的消息。
【讨论】:
以上是关于GCP 中的物联网管道的主要内容,如果未能解决你的问题,请参考以下文章