Google KubernetesEngineでホストされているNodeJSAPIがあり、BigQueryへのイベントのログ記録を開始したいと思います。
私はそれを行う3つの異なる方法を見ることができます:
この特定のユースケースでは、変換を行う必要はなく、イベントを適切な形式で直接送信します。しかし、後で分析のためにメインデータストア(MySQL)からBQにテーブルを同期する必要がある他のユースケースがあるかもしれないので、Dataflowからすぐに始める価値があるでしょうか?
いくつかの質問 :
オプション2の場合、はい。コードを記述せずにPubSubからBigQueryへのデータの移動を容易にするGoogle提供のテンプレートと呼ばれるプリセットがあります。
このGoogle提供のテンプレートやその他の使用方法について詳しくは、 Cloud Dataflowのドキュメント をご覧ください。
別のオプションは、ログシンクを使用してログをエクスポートすることです。 Stackdriver Logging UIから直接、ログにBigQuery(または他の宛先)を指定できます。 Node APIはKubernetesで実行されているため、メッセージをstdout
に記録するだけで、自動的にStackdriverに書き込まれます。
参照: https://cloud.google.com/logging/docs/export/configure_export_v2
これを見てみると、少し答えが足りない気がします。各アプローチの長所と短所について、次のように説明します。
(Node BQ APIまたはカスタムワーカープロセスを介して)カスタムプログラムを作成する場合、いくつかの1回限りの保証に関しては落とし穴があります。具体的には、自分のワーカーの場合、進行状況をチェックするために追加の作業を実行し、ランタイムエラーやワーカープロセスが停止した場合に要素が削除または複製されないようにする必要があります。
要件が変更された場合(たとえば、BQストリーミング挿入の実行が高額になりすぎる場合)、DataflowのJava SDKは、ストリーミング挿入、または複数のロードジョブを実行するより安価なオプションのいずれかをシームレスにサポートします。ストリーミング挿入の代わりにBQ;また、複数のデータソースも処理します。
Dataflowは、データ量が増加した場合に自動スケーリングを提供します。
それを念頭に置いて、私は言うでしょう:
ユースケースが比較的単純で、ワーカーの再起動時に非常にまれなデータポイントがドロップされても問題がない場合は、カスタム作成されたNode/Python applicationあなたのためにトリックをする必要があります。
ユースケースにPubSubのBQへのストリーミングのみが含まれているが、データがドロップされていないことを確認する必要がある場合は、 Andrewが提供するテンプレート を確認してください。これはまさにこれを行います。
ユースケースがそれよりも複雑になる可能性がある場合は、独自のパイプラインを作成することを検討してください(そして、 インスピレーションとしてテンプレートコード !を使用してください)。