ストリーミング取り込み - Amazon Redshift

ストリーミング取り込み

ストリーミング取り込みでは、Amazon Kinesis Data Streams および Amazon Managed Streaming for Apache Kafka から Amazon Redshift Serverless でプロビジョニングされたビューまたは Amazon Redshift マテリアライズドビューにストリームデータを低レイテンシーかつ高速で取り込むことができます。データアクセスにかかる時間を短縮し、ストレージコストを削減することができます。Amazon Redshift でのマテリアライズドビューの作成 で説明されているように、Amazon Redshift クラスターまたは Amazon Redshift Serverless にストリーミング取り込みを設定することで、SQL ステートメントを使用して、マテリアライズドビューを作成することができます。その後、マテリアライズドビューの更新を使用して、毎秒数百メガバイトのデータを取り込むことができます。これにより、外部データにすばやくアクセスできるので、更新が高速化されます。

データフロー

Amazon Redshift でプロビジョニングされたクラスターまたは Amazon Redshift Serverless サーバーレスワークグループが、ストリームコンシューマーです。マテリアライズドビューは、ストリームから読み込まれるデータのランディング領域であり、このデータは到着時に処理されます。例えば、JSON 値を消費し、使い慣れた SQL を使用して、マテリアライズドビューのデータ列にマッピングすることができます。マテリアライズドビューの更新時、Amazon Redshift のコンピューティングノードは、各 Kinesis データシャードまたは Kafka パーティションをコンピューティングスライスに割り当てます。各スライスは、ビューの内容が Kinesisストリームの SEQUENCE_NUMBER または Kafka トピックの最後の Offset のと同等になるまで、割り当てられたシャードのデータを処理します。後続のマテリアライズドビューでは、以前の更新における最後の SEQUENCE_NUMBER からの読み取りデータが、ストリームデータまたはトピックデータと同等になるまで更新されます。

ストリーミング取り込みのユースケース

Amazon Redshift でのストリーミング取り込みのユースケースは、継続的に生成 (ストリーミング) され、その生成から短期間 (低レイテンシー) の内に処理する必要があるデータの処理を含みます。これは、ほぼリアルタイムの分析と呼ばれます。このためのデータソースは、IOT デバイス、システムテレメトリーデータ、またはビジー状態のウェブサイトやアプリケーションからのクリックストリームデータなど、さまざまなものがあります。

ストリーミング取り込みに関する考慮事項

ストリーミング取り込み環境を設定する際の、パフォーマンスと請求に関する重要な考慮事項とベストプラクティスを次に示します。

  • 自動更新の使用と有効化 - マテリアライズドビューに対する自動更新クエリは、他のユーザーワークロードと同様に扱われます。自動更新は、ストリームが到達するとデータをロードします。

    ストリーミング取り込み用に作成されたマテリアライズドビューでは、自動更新を明示的にオンにできます。これを行うには、マテリアライズドビュー定義で AUTO REFRESH を指定します。手動更新がデフォルトです。ストリーミング取り込み用の既存のマテリアライズドビューに自動更新を指定するには、ALTER MATERIALIZED VIEW を実行してオンにします。詳細については、「CREATE MATERIALIZED VIEW」または「ALTER MATERIALIZED VIEW」を参照してください。

  • ストリーミングの取り込みと Amazon Redshift Serverless — プロビジョニングされたクラスターでの Amazon Redshift ストリーミングの取り込みに適用されるのと同じセットアップと設定の手順が、Amazon Redshift Serverless でのストリーミング取り込みにも適用されます。自動更新やその他のワークロードによるストリーミングの取り込みをサポートするために必要なレベルの RPU で Amazon Redshift Serverless のサイズを設定することが重要です。詳細については、「Amazon Redshift Serverless の料金」を参照してください。

  • Amazon MSK クラスターとは異なるアベイラビリティーゾーンにある Amazon Redshift ノード - ストリーミング取り込みを設定すると、Amazon MSK のラック認識が有効になっている場合、Amazon Redshift は同じアベイラビリティーゾーンの Amazon MSK クラスターへの接続を試みます。すべてのノードが Amazon Redshift クラスターとは異なるアベイラビリティーゾーンにある場合、アベイラビリティーゾーン間のデータ転送コストが発生する可能性があります。これを回避するには、Amazon Redshift クラスターと同じ AZ に少なくとも 1 つの Amazon MSK ブローカークラスターノードを置いてください。

  • 更新の開始場所 - マテリアライズドビューを作成すると、最初の更新は TRIM_HORIZON Kinesis ストリームまたは Amazon MSK トピックのオフセット 0 から始まります。

  • データ形式 - サポートされるデータ形式は、VARBYTE からの変換が可能なデータ形式に限られます。詳細については、「VARBYTE 型」および「VARBYTE 演算子」を参照してください。

  • 複数のマテリアライズドビューへのストリーミング - Amazon Redshift では、ほとんどの場合、各ストリームのデータを 1 つのマテリアライズドビューに配置することをお勧めします。ただし、ストリームを取り込んでデータを複数のマテリアライズドビューに配置することは可能です。例えば、スポーツデータを含むストリームを取り込み、各スポーツのデータを個別のマテリアライズドビューに整理するユースケースの場合などです。

    複数のマテリアライズドビューにデータを取り込んで更新すると、特にストリーミングプロバイダーからデータを読み取る場合、出力コストが高くなる可能性があることに注意してください。さらに、複数のマテリアライズドビューを読み込む際のリソース使用率が高くなると、他のワークロードに影響を与える可能性があります。また、ストリーミングプロバイダーの帯域幅、スループット、パフォーマンスの制限にも注意してください。データストリームの料金の詳細については、「Kinesis Data Streams pricing」(Kinesis Data Streams の料金) および「Amazon Managed Streaming for Apache Kafka pricing」(Amazon Managed Streaming for Apache Kafka の料金) を参照してください。

Amazon S3 のデータのステージングとストリーミング取り込みの使用の比較

Amazon Redshift または Amazon Redshift Serverless にデータをストリーミングする複数のオプションがあります。よく知られているオプションには、このトピックで説明されているストリーミング取り込みと、Kinesis Data Firehose を使用して Amazon S3 への配信ストリームをセットアップする方法の 2 つがあります。以下のリストで、それぞれの方法を説明します。

  1. Kinesis Data Streams または Amazon Managed Streaming for Apache Kafka から Amazon Redshift または Amazon Redshift Serverless へのストリーミング取り込みでは、データを受信するためにマテリアライズドビューを設定する必要があります。

  2. Kinesis Data Streams を使用して Amazon Redshift にデータを配信し、Kinesis Data Firehose を介してストリーミングするには、ソースストリームを Amazon Kinesis Data Firehose に接続し、Kinesis Data Firehose が Amazon S3 にデータをステージングするのを待つ必要があります。このプロセスでは、さまざまな長さのバッファ間隔でさまざまなサイズのバッチを使用します。Amazon S3 にストリーミングした後、Kinesis Data Firehose はデータをロードするための COPY コマンドを開始します。

ストリーミング取り込みでは、2 番目のプロセスで必要ないくつかの手順を省略できます。

  • ストリーミング取り込みでは、Kinesis Data Streams から Redshift データベースのマテリアライズドビューにデータを直接送信できるため、Amazon Kinesis Data Firehose 配信ストリームにデータを送信する必要はありません。

  • ストリーミング取り込みデータは Redshift マテリアライズドビューに直接送信されるため、ストリーミングデータを Amazon S3 に入れる必要はありません。

  • マテリアライズドビュー内のデータはストリームから直接更新されるため、COPY コマンドを記述して実行する必要はありません。Amazon S3 から Redshift へのデータのロードはプロセスの一部ではありません。

ストリーミング取り込みは Amazon Kinesis Data Streams からのストリームと Amazon MSK からのトピックに限定されることに注意してください。Kinesis Data Streams から Amazon Redshift 以外のソースにストリーミングする場合、Kinesis Data Firehose 配信ストリームが必要になる可能性があります。詳細については、「Amazon Kinesis Data Firehose 配信ストリームへのデータの送信」を参照してください。

制限事項

機能または動作 説明
Kafka トピックの長さ制限

Kafka トピックの名前は 128 文字 (引用符は含まない) を超えることはできません。詳細については、「名前と識別子」を参照してください。

マテリアライズドビューでの増分の更新と JOIN

マテリアライズドビューは、増分的な保守が可能である必要があります。Kinesis や Amazon MSK では、24 時間または 7 日前のストリームやトピックの履歴は保持されないため、完全な再計算は不可能です。Kinesis または Amazon MSK では、より長いデータ保持期間を設定することができます。ただし、これによりメンテナンスとコストが増える可能性があります。また、現在、Kinesis Streams や Amazon MSK トピックで作成されたマテリアライズドビューでは、JOIN の使用はサポートされていません。ストリームやトピックでマテリアライズドビューを作成した後、別のマテリアライズドビューを作成して、ストリーミングのマテリアライズドビューと他のマテリアライズドビュー、テーブル、またはビューとの結合のために使用できます。

詳細については、「REFRESH MATERIALIZED VIEW」を参照してください。

レコード解析

Amazon Redshift のストリーミング取り込みでは、Kinesis プロデューサーライブラリ (KPL の重要なコンセプト) によって集計されたレコードの解析をサポートしていません。集計されたレコードは取り込まれますが、バイナリプロトコルのバッファデータとして格納されます。(詳細については「Protocol buffers」(プロトコルバッファ) を参照してください。) Kinesis へのデータのプッシュ方法によっては、この機能の無効化が必要となる場合があります。

解凍

VARBYTE では現在、解凍処理がサポートされていません。このため、圧縮データを含むレコードを Redshift でクエリすることはできません。データは、Kinesis ストリームまたは Amazon MSK トピックにプッシュする前に解凍してください。

レコードの最大サイズ

Amazon Redshift が Kinesis または Amazon MSK から取り込むことができるレコードフィールドの最大サイズは、1 MB をわずかに下回ります。動作の詳細は以下のとおりです。

  • VARBYTE の最大長 - VARBYTE タイプは、最大長 1,024,000 バイトのデータをサポートします。Kinesis はペイロードを 1MB に制限しているので、Base64 エンコーディングの後、すべての Kinesis データは Amazon Redshift によって取り込むことができます。

  • メッセージ制限 - Amazon MSK のデフォルト設定では、メッセージは 1 MB に制限されています。また、メッセージにヘッダーが含まれる場合、データ量は 1,048,470 バイトに制限されます。デフォルトの設定では、取り込みに問題はありません。ただし、Kafka、つまり Amazon MSK では最大メッセージサイズをより大きな値に変更できます。この場合、Kafka レコードのキーと値フィールドまたはヘッダーがサイズ制限を超える可能性があります。これらのレコードはエラーの原因となる可能性があり、取り込まれることはありません。

エラーレコード

データのサイズが最大サイズを超えているためにレコードを Redshift に取り込めない場合、そのレコードはスキップされます。この場合でも、マテリアライズドビューの更新は成功し、各エラーレコードのセグメントが SYS_STREAM_SCAN_ERRORS システムテーブルに書き込まれます。計算のエラーやタイプ変換によるエラーなど、ビジネスロジックに起因するエラーはスキップされません。マテリアライズドビュー定義にロジックを追加する前に、ロジックを注意深くテストして、これらを回避してください。