【问题标题】:IoT pipeline in GCPGCP 中的物联网管道
【发布时间】: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


【解决方案1】:

这个错误是因为每 10 秒后发布/订阅重新发送尚未确认的消息。这导致消息总数迅速增长,因为发送消息的设备数量和发送消息的速率已经非常高。所以我将这个等待时间增加到 30 秒,系统就平静下来了。现在,当我运行管道时,不会形成大量未确认的消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多