2

IoTイベントデータをGoogle Cloud Storageに保存したい場合は、データ湖として使用します。しかし、すべてのイベントに対してPUT呼び出しを行うのはコストがかかりすぎるため、ファイルに追加して1時間ごとにPUT呼び出しを行いたいとします。メッセージ処理サービスのノードがダウンした場合にデータを失うことなくこれを行う方法は何ですか?Google Cloud Pub/SubからGoogle Cloud Storageに毎時バッチ書き込みを行う方法はありますか?

私の処理サービスがメッセージにACKすると、そのメッセージはGoogle Pub/Subにはなくなりますが、まだGoogle Cloud Storageには存在しません。その時点でその処理ノードがダウンすると、データ。

私の希望使い方はS3にPUTing前にバッチメッセージにAWSキネシス消防ホースを使用しての話この記事に似ていますが、でもキネシス消防ホースの最大バッチ間隔は900秒(または128メガバイト)です。 https://aws.amazon.com/blogs/big-data/persist-streaming-data-to-amazon-s3-using-amazon-kinesis-firehose-and-aws-lambda/

+1

IoTイベントごとに1つのPub/Subメッセージを取得しますか?ファイルを送信する準備ができるまで、特定のノードによって処理されたメッセージの確認期限を延長することは可能でしょうか?ノードが停止すると、ackの期限が切れた後、メッセージは処理サービスの別のサブスクライバーに再配信されます。 まだ十分に多くのメッセージがある場合は、すべてのメッセージを同時に確認できないため、ノードがアップロード後ではなく、受信前に重複したエントリを取得する可能性があります。タイムスタンプ/ GCSオブジェクトの命名でこれを解決できるかもしれません。 –

答えて

1

の場合定期購読からのメッセージを継続的に受信したい場合は、メッセージをGoogle Cloud Storageに正常に書き込むまでメッセージを保留する必要があります。 Google Cloud Pub/Subの最新のクライアントライブラリは、あなたがそれを覚えていない場合は、バックグラウンドであなたのために自動的にackの期限を延長します。

また、ある時間帯に1時間ごとに加入者を開始すればどうなりますか? 1時間ごとに、あなたは加入者を立ち上げ、メッセージを受信し、それらを一緒にバッチし、Cloud Storageへの1回の書き込みを行い、すべてのメッセージを確認することができます。現在のバッチのサブスクライバをいつ停止するかを判断するには、一定の時間長を維持するか、num_undelivered_messages attribute via Stackdriverを監視して、未処理のメッセージのほとんどをいつ消費したかを判断できます。

+0

ありがとうございます。 1時間に1回しか走らないのは私には起こりませんでした。それは理にかなっている。 – gunit

関連する問題