Amazon Managed Service for Apache Flink に関するよくある質問
全般
すべて開くAmazon Managed Service for Apache Flink では、Apache Flink を使用してストリーミングデータをリアルタイムで変換および分析できます。Apache Flink はオープンソースのフレームワークであり、データストリームを処理するためのエンジンです。Amazon Managed Service for Apache Flink を利用すると、Apache Flink アプリケーションを構築し、管理し、AWS のサービスと統合する作業がシンプルになります。
Amazon Managed Service for Apache Flink では、ストリーミングアプリケーションを継続的に実行するために必要なものすべてが提供され、受信データのボリュームとスループットレートに応じて自動的にスケールされます。Amazon Managed Service for Apache Flink を使用すれば、ストリーミングアプリケーションが使用するリソースに対してのみお支払いいただきます。サーバーを管理することも、最低料金やセットアップ費用がかかることもありません。
Amazon Managed Service for Apache Flink はさまざまなユースケースで使用し、データを継続的に処理したり、数日や数週間待つことなく数秒または数分でインサイトを得たりすることができます。 Amazon Managed Service for Apache Flink では、ログ分析、クリックストリーム分析、モノのインターネット (IoT)、アドテク、ゲームなどを用途とするエンドツーエンドストリーム処理アプリケーションを簡単に構築できます。一般的な 4 つのユースケースには、ストリーミング ETL (Extract-Transform-Load/抽出、変換、読み込み)、継続的メトリクス生成、応答リアルタイム分析、データストリームのインタラクティブなクエリがあります。
ストリーミング ETL
ストリーミング ETL アプリケーションでは、データレイクやデータウェアハウスをロードする前に、リアルタイムで未加工データをクリーニング、エンリッチ化、整理、変換でき、バッチ ETL のステップを減らすか、またはなくすことができます。配信前に小さなレコードを大きなファイルにバッファリングしたり、ストリームやテーブルをまたいで高度な連結を実行したりできます。たとえば、Amazon Managed Streaming for Apache Kafka (Amazon MSK) に保存されている IoT センサーデータを継続的に読み取り、データをセンサータイプ別に整理し、重複データを削除し、指定されたスキーマに従ってデータを正規化し、そのデータを Amazon Simple Storage Service (Amazon S3) に配信するアプリケーションを構築できます。
継続的メトリクス生成
継続的メトリクス生成アプリケーションでは、データの経時的な傾向を監視し、理解できます。アプリケーションでストリーミングデータを集めて重要な情報を引き出したり、報告用データベースやモニタリングサービスとつなぎ目なく統合し、アプリケーションやユーザーにリアルタイムでサービスを提供したりできます。Amazon Managed Service for Apache Flink では、Apache Flink コード (Java、Scala、Python、または SQL) を使用して、時間ウィンドウにわたって時系列分析を継続的に生成できます。例えば、モバイルゲームのトッププレーヤーを毎分決定して Amazon DynamoDB に送信することで、リアルタイムの順位表を作成できます。また、5 分ごとにウェブサイトの一意の訪問者数を計算し、処理した結果を Amazon Redshift に送信することで、ウェブサイトのトラフィックを追跡することもできます。
リアルタイム応答分析
リアルタイム応答分析アプリケーションは、特定のメトリクスが事前定義しきい値に到達したときや、より高度な例では、機械学習 (ML) アルゴリズムを使用してアプリケーションによって異常が検出されたときに、リアルタイムのアラームまたは通知を送信します。このようなアプリケーションでは、ユーザーがモバイルアプリを断念するのを予測し、劣化したシステムを特定するなど、ビジネスにおける変化にリアルタイムですぐに対応できます。たとえば、アプリケーションで、時系列における顧客向け API の可用性または正常終了率を計算して、その結果を Amazon CloudWatch に送信できます。また、特定の基準を満たすイベントを検出し、それを Amazon Kinesis Data Streams と Amazon Simple Notification Service (Amazon SNS) を使用して適切なユーザーに自動的に通知するアプリケーションを作成することもできます。
データ ストリームのインタラクティブな分析
インタラクティブな分析により、データのストリーミングの探索をリアルタイムで行えます。アドホックなクエリまたはプログラムを使用すると、Amazon MSK または Amazon Kinesis Data Streams からのストリームを検査し、それらのストリーム内のデータがどのように見えるかを可視化することができます。例えば、時間枠の平均を計算するリアルタイムメトリクスがどのように動作するかを表示し、選択した送信先に集計データを送信できます。また、インタラクティブな分析は、ストリーム処理アプリケーションの反復開発にも役立ちます。作成したクエリは、新しいデータが到着すると継続的に更新されます。Amazon Managed Service for Apache Flink Studio を使用すると、これらのクエリをデプロイし、自動スケーリングと永続的な状態のバックアップを有効にして継続的に実行することができます。
開始方法
すべて開くはい。Apache Flink DataStream コネクタを利用すると、Amazon Managed Service for Apache Flink アプリケーションが AWS Glue のサーバーレス機能である AWS Glue スキーマレジストリを使用できるようになります。Apache Kafka/Amazon MSK および Amazon Kinesis Data Streams を、シンクまたはソースとして、Amazon Managed Service for Apache Flink ワークロードと統合できます。開始および詳細については、 AWS Glue スキーマレジストリ開発者ガイドをご覧ください。
主要な概念
すべて開くアプリケーションは、使用する Amazon Managed Service for Apache Flink のエンティティです。Amazon Managed Service for Apache Flink アプリケーションでは、ストリーミングデータがリアルタイムで連続的に読み込まれて処理されます。Apache Flink がサポートする言語を使用してアプリケーションコードを記述し、着信ストリーミングデータを処理して出力を生成します。次に、Amazon Managed Service for Apache Flink が、設定した出力先に出力を書き込みます。
各アプリケーションは、3 つの基本的コンポーネントで構成されています。
- 入力: 入力はアプリケーションのストリーミングソースです。入力の設定では、ストリーミングソースをデータストリームにマッピングします。データはデータソースからデータストリームに流れます。アプリケーションコードを利用してこのようなデータストリームからのデータを処理し、処理したデータを後続のデータストリームなどのデータの出力先に送信します。Apache Flink アプリケーションや Studio ノートブックのアプリケーションコード内、および Amazon Managed Service for Apache Flink アプリケーションの API を介して、入力を追加します。
- アプリケーションのコード: アプリケーションコードは入力の処理と出力の生成を行う一連の Apache Flink 演算子です。最も単純な形状では、アプリケーションコードは、ストリーミングソースに関連付けられているデータストリームから読み込み、出力に関連付けられているその他のデータストリームに書き込む 1 つの Apache Flink 演算子になります。Studio ノートブックの場合、これは単純な Flink SQL 選択クエリであり、結果はノートブック内のコンテキストに表示されます。Amazon Managed Service for Apache Flink アプリケーションまたは Studio ノートブック用の Apache Flink コードを、サポートされている言語で記述できます。
- 出力: オプションで、データを外部の出力先に保存するようにアプリケーション出力を設定できます。Amazon Managed Service for Apache Flink アプリケーションや Studio ノートブックのアプリケーションコード内に出力を追加します。
アプリケーションの管理
すべて開くAWS では Apache Flink アプリケーションの Flink ダッシュボードへのアクセスなど、Amazon Managed Service for Apache Flink アプリケーションのモニタリングに使用できるさまざまなツールを提供しています。自動モニタリングを実施するように、これらのツールを設定できます。アプリケーションの監視方法の詳細については、以下のデベロッパーガイドをご覧ください。
Amazon Managed Service for Apache Flink では、ユーザーがアプリケーション内で指定したストリーミングデータソース内のレコードに対する読み取り権限が必要になります。また、Amazon Managed Service for Apache Flink はユーザーがアプリケーション出力設定に指定した出力先にアプリケーション出力を書き込む権限も必要になります。これらの権限を付与するには、Amazon Managed Service for Apache Flink が引き受けることのできる AWS Identity and Access Management (IAM) ロールを作成します。このロールに付与する権限によって、サービスがこのロールを引き受けたときに Amazon Managed Service for Apache Flink で実行できる内容が決まります。詳細については、次のデベロッパーガイドを参照してください。
- 『Amazon マネージドサービス for Apache Flink 開発者ガイド』の「権限の付与」
- 『Apache Flink Studio 開発者ガイド』の Amazon マネージドサービスにおけるアクセス権限の付与
Amazon Managed Service for Apache Flink により、アプリケーションが大半のシナリオにおける複雑なクエリとソースストリームのデータスループットに対応できるように、伸縮自在にスケールされます。Amazon Managed Service for Apache Flink は、Amazon KPU という形でキャパシティをプロビジョニングします。1 つの KPU で 1 vCPU と 4 GB メモリが与えられます。
Apache Flink アプリケーションおよび Studio ノートブックの場合、Amazon Managed Service for Apache Flink によって、KPU あたり 50 GB の稼働アプリケーションストレージが割り当てられます。このストレージはアプリケーションによってチェックポイントに利用されます。また、これは一時ディスクを通じて利用できます。チェックポイントは、アプリケーションが中断したとき、即座に回復するために使用される、稼働アプリケーションの最新バックアップです。API の Parallelism パラメータと ParallelismPerKPU パラメータを利用し、Apache Flink アプリケーションタスク (ソースから読み込んだり、演算子を実行したりなど) に対する Amazon Managed Service for Apache Flink の並列実行を制御することもできます。Parallelism によってタスクの同時実行インスタンスの数が定義されます。演算子、ソース、シンクはすべて定義された並列処理で実行されます。デフォルトは 1 です。KPU あたりの Parallelism によって、アプリケーションの KPU 単位でスケジュールできる並列タスクの数が定義されます。デフォルトは 1 です。詳細については、Amazon Managed Service for Apache Flink デベロッパーガイド の「スケーリング」を参照してください。
Apache Flink のベストプラクティスについては、『Amazon マネージドサービス for Apache Flink 開発者ガイド』の「ベストプラクティス」セクションを参照してください。このセクションでは、耐障害性、ログ記録、コーディングなどのベストプラクティスを取り上げます。
Amazon Managed Service for Apache Flink Studio のベストプラクティスについては、Amazon Managed Service for Apache Flink Studio デベロッパーガイドの「ベストプラクティス」セクションを参照してください。ベストプラクティスに加えて、このセクションでは、SQL、Python、Scala アプリケーションのベストプラクティスとサンプル、継続的に実行されるストリーム処理アプリケーションとしてコードをデプロイするための要件、パフォーマンス、ロギングなどについて説明しています。
はい。Amazon VPC の背後のリソースにアクセスできます。アプリケーションを VPC アクセス用に設定する方法については、『Amazon マネージドサービス for Apache Flink 開発者ガイド』の「Amazon VPC を使用する」セクションを参照してください。
個別 VPC のリソースに対するアクセスを設定された Amazon Managed Service for Apache Flink アプリケーションおよび Amazon Managed Service for Apache Flink Studio ノートブックでは、デフォルトの構成としてインターネットにアクセスできなくなっています。アプリケーションのインターネットへのアクセスを設定する方法については、『Amazon マネージドサービス for Apache Flink 開発者ガイド』の「インターネットとサービスアクセス」セクションを参照してください。
料金と請求
すべて開くAmazon Managed Service for Apache Flink では、使用した分についてのみお支払いいただきます。Amazon Managed Service for Apache Flink では、リソースのプロビジョニングをする必要がなく、初期費用もありません。
ストリーミングアプリケーションの実行に使用された KPU の数に基づいて時間あたりの課金が発生します。KPU とは、1 vCPU のコンピューティングと 4 GB のメモリで構成されるストリーム処理能力の単位です。Amazon Managed Service for Apache Flink では、メモリやコンピューティングの要求が処理の複雑性や処理されたストリーミングデータのスループットに合わせて変わるとき、ストリーム処理アプリケーションによって必要とされる KPU の数が自動的に拡大縮小されます。
Apache Flink と Apache Beam のアプリケーションの場合、アプリケーションのオーケストレーションに使用した KPU が、アプリケーションあたり 1 単位追加される方式で課金されます。Apache Flink と Apache Beam のアプリケーションは、稼働アプリケーションストレージと永続的アプリケーションバックアップに対しても課金されます。稼働アプリケーションストレージは Amazon Managed Service for Apache Flink のステートフル処理機能のために使用され、GB 単位で毎月課金されます。永続的アプリケーションバックアップは任意です。これは、アプリケーションバックアップにポイントインタイムリカバリを提供するもので、GB 単位で毎月課金されます。
開発モードまたはインタラクティブモードの Amazon Managed Service for Apache Flink Studio の場合、アプリケーションオーケストレーション用の KPU とインタラクティブな開発用の 1 つの KPU について追加で課金されます。アプリケーション ストレージの実行にも課金されます。耐久性のあるアプリケーションのバックアップには課金されません。
料金の詳細については、Apache Flink 向け Amazon マネージドサービスの料金ページを参照してください。
Apache Flink と Apache Beam のアプリケーションの場合、Amazon Managed Service for Apache Flink アプリケーションを実行しているのであれば、2 KPU と 50GB の稼働アプリケーションストレージに対する料金が最低料金として請求されます。
Amazon Managed Service for Apache Flink Studio ノートブックの場合、アプリケーションを実行しているのなら、3 KPU と 50GB の稼働アプリケーションストレージに対する料金が最低料金として請求されます。
Apache Flink アプリケーションの構築
すべて開くApache Flink は、ストリームおよびバッチデータ処理用のオープンソースフレームワークおよびエンジンです。用途の広い演算子を提供し、重複処理など、ストリーミングの中心的問題を解決するため、ストリーミングアプリケーションを簡単に構築できます。Apache Flink は、データストリーム全体の分散計算に対してデータ分配、通信、耐障害性を与えます。
まず、AWS SDK、Apache Flink、AWS のサービス向けコネクタを含むオープンソースライブラリをダウンロードすることから始めます。ライブラリをダウンロードして最初のアプリケーションを作成する方法については、『 Amazon マネージドサービス for Apache Flink 開発者ガイド』を参照してください。
データストリームとストリーム演算子を利用し、Apache Flink コードを記述します。アプリケーションデータストリームは、コードを利用した処理の実行対象となるデータ構造です。データはソースからアプリケーションデータストリームに継続的に流れます。変換、分割、集計、結合、ウィンドウなどの処理をアプリケーションデータストリームで定義するために 1 つまたは複数のストリーム演算子が使用されます。データストリームと演算子はシリアルチェーンとパラレルチェーンでつなげることができます。擬似コードを利用した簡単な例を以下に示します。
DataStream <GameEvent> rawEvents = env.addSource(
New KinesisStreamSource(“input_events”));
DataStream <UserPerLevel> gameStream =
rawEvents.map(event - > new UserPerLevel(event.gameMetadata.gameId,
event.gameMetadata.levelId,event.userId));
gameStream.keyBy(event -> event.gameId)
.keyBy(1)
.window(TumblingProcessingTimeWindows.of(Time.minutes(1)))
.apply(...) - > {...};
gameStream.addSink(new KinesisStreamSink("myGameStateStream"));
オペレータはアプリケーションデータストリームを入力として受け取り、処理されたデータを出力としてアプリケーションデータストリームに送信します。演算子をつなげて複数の手順を持つアプリケーションを構築できます。実装や運用に分散システムの高度な知識は必要ありません。
Amazon Managed Service for Apache Flink は Apache Flink のすべてのオペレータをサポートしていて、マップ、KeyBy、集約、ウィンドウ、結合など、さまざまなユースケースの解決に使用できます。例えば、マップ演算子では、任意の処理を実行できます。入ってきたデータストリームから 1 つの要素を受け取り、別の要素を生み出します。KeyBy では、指定したキーを利用してデータが論理的に整理されるため、同様のデータポイントをまとめて処理できます。集合では、sum、min、max など、複数のキーをまたいで処理が実行されます。Window Join では、所与のキーとウィンドウで 2 つのデータストリームが結合されます。
これらの演算子で要件が満たされない場合、カスタム演算子を構築できます。他の例については、Amazon Managed Service for Apache Flink デベロッパーガイドの「演算子」セクションをご覧ください。Apache Flink オペレータの完全なリストは、Apache Flink のドキュメントに記載されています。
最小限のコードで Apache Flink が提供する事前構築された統合をセットアップするか、独自の統合を構築して事実上すべてのデータソースに接続することができます。Apache Flink をベースとするオープンソースライブラリでは、データの配信を処理するためのストリーミングの配信元、配信先、シンクがサポートされます。これには、非同期 I/O コネクタを通じたデータ強化サポートも含まれています。これらのコネクタには、次のものが含まれます。
- ストリーミングデータソース: Amazon Managed Streaming for Apache Kafka (Amazon MSK)、Amazon Kinesis Data Streams Destinations、またはシンク: Amazon Kinesis Data Streams
- Amazon Kinesis Data Firehose、Amazon DynamoDB、Amazon Elasticsearch Service、Amazon S3 (ファイルシンク統合経由で)
はい。Amazon Managed Service for Apache Flink アプリケーションを使用して、Amazon Kinesis Data Streams、Amazon MSK、および他のシステム間でデータを複製できます。 ドキュメントに記載されている例は、ある Amazon MSK トピックから読み取り、別のトピックに書き込む方法を示しています。
ファイル、ディレクトリ、ソケット、あるいはインターネット経由でアクセスできるあらゆるものとの読み書きを可能にする一連のプリミティブの上に構築することで、アプリケーションに配信元と配信先を追加できます。Apache Flink はこれらのプリミティブをデータソースとデータシンクに提供します。プリミティブには、データを継続的、1 回限り、非同期、同期などの方法で読み書きする機能などの設定が付属します。例えば、既存のファイルベースのソース統合を延長することで、Amazon S3 から継続的に読み込むアプリケーションを設定できます。
Amazon Managed Service for Apache Flink の Apache Flink アプリケーションでは、ソースとシンクなど、べき等演算子を使用してアプリケーションが構築されている場合、「厳密に 1 回」の配信モデルが使用されます。つまり、処理されたデータは下流の結果に 1 回だけ影響を与えます。
デフォルトでは、Amazon Managed Service for Apache Flink アプリケーションでは Apache Flink の「厳密に 1 回」のセマンティックスが使用されます。Apache Flink の「厳密に 1 回」のセマンティックスを活用するソース、演算子、シンクでアプリケーションを設計する場合、そのアプリケーションでは「厳密に 1 回」の処理セマンティックスがサポートされます。
Amazon Managed Service for Apache Flink では、チェックポイントとスナップショットを利用し、稼働アプリケーションの状態が自動的にバックアップされます。チェックポイントではアプリケーションの現在の状態が保存されます。Amazon Managed Service for Apache Flink アプリケーションでは、アプリケーションの位置を回復できるため、障害なし実行と同じ意味になります。チェックポイントでは、稼働アプリケーションストレージが使用されます。Apache Flink アプリケーションのチェックポイントは、Apache Flink のチェックポイント機能を通じて提供されます。スナップショットは、アプリケーションのポイントインタイムリカバリポイントを保存し、永続的なアプリケーションバックアップを使用します。スナップショットは Flink セーブポイントに似ています。
サポートされている Apache Flink バージョンの詳細については、 Amazon マネージドサービス for Apache Flink リリースノートのページをご覧ください。このページには、Amazon Managed Service for Apache Flink がサポートする Apache Beam、Java、Scala、Python、および AWS SDK のバージョンも記載されています。
はい、Apache Flink 向け Amazon マネージドサービスは、Apache Beam を使用して構築されたストリーミングアプリケーションをサポートしています。Java で Apache Beam ストリーミングアプリケーションを構築し、Amazon Managed Service for Apache Flink で Apache Flink を使用するなど、さまざまなエンジンやサービスで実行することができます。サポートされている Apache Flink と Apache Beam のバージョンに関する情報は、『 Amazon マネージドサービス for Apache Flink』開発者ガイドに記載されています。
マネージドノートブックでの Amazon Managed Service for Apache Flink Studio アプリケーションの構築
すべて開くわずか数ステップで Amazon Managed Service for Apache Flink Studio、Amazon Kinesis Data Streams、または Amazon MSK コンソールから開始してサーバーレスノートブックを起動し、データストリームをすぐにクエリしてインタラクティブなデータ分析を実行できます。
インタラクティブなデータ分析:SQL、Python、または Scala でノートブックにコードを記述して、ストリーミングデータを操作できます。クエリの応答時間は秒単位です。組み込みの可視化を使用して、ノートブック内からデータを探索し、ストリーミング データに関するリアルタイムインサイトを表示し、Apache Flink を利用したストリーム処理アプリケーションを開発できます。
コードを本番アプリケーションとして実行する準備ができたら、ワンステップで、サーバーなしで 1 秒あたり数ギガバイトのデータを処理するストリーム処理アプリケーションに移行できます。
ストリーム処理アプリケーション:コードを本番環境にプロモートする準備ができたら、ノートブックインターフェイスの [ストリーム処理アプリケーションとしてデプロイ] をクリックしてコードをビルドするか、CLI で 1 つのコマンドを発行します。Amazon Managed Service for Apache Flink アプリケーションと同様に、自動スケーリングと耐久性のある状態が有効になった Studio がストリーム処理アプリケーションを大規模に実行するために必要なインフラストラクチャ管理をすべて行います。
次のような SQL オペレーションを実行できます:
- スキャンとフィルタリング (SELECT、WHERE)
- 集計 (GROUP BY、GROUP BY WINDOW、HAVING)
- セット (UNION、UNIONALL、INTERSECT、IN、EXISTS)
- 順序 (ORDER BY、LIMIT)
- 結合 (INNER、OUTER、時限ウィンドウ – BETWEEN、AND、一時テーブルとの結合 – 時間の経過に伴う変化を追跡するテーブル)
- Top-N
- データ重複排除
- パターン認識
GROUP BY、OUTER JOIN、Top-N などの一部のクエリは、ストリーミングデータの「結果の更新」です。つまり、ストリーミングデータが処理されると、結果が継続的に更新されます。CREATE、ALTER、DROP などの他の DDL ステートメントもサポートされています。クエリとサンプルの完全なリストについては、 Apache Flink クエリのドキュメントを参照してください。
Apache Flink の Table API は、Python 文字列と Scala 式を使用した言語統合を通じて、Python と Scala をサポートしています。サポートされている操作は、選択、順序、グループ化、結合、フィルター、ウィンドウ処理など、サポートされている SQL 操作と非常に似ています。操作とサンプルの完全なリストは、開発者ガイドに含まれています。
サポートされている Apache Flink バージョンの詳細については、 Amazon マネージドサービス for Apache Flink リリースノートのページをご覧ください。このページには、Amazon Managed Service for Apache Flink がサポートする Apache Zeppelin、Apache Beam、Java、Scala、Python、および AWS SDK のバージョンも記載されています。
- データソース: Amazon Managed Streaming for Apache Kafka (Amazon MSK)、Amazon Kinesis Data Streams、Amazon S3
- 統合先、またはシンク: Amazon MSK、Amazon Kinesis Data Streams、Amazon S3
サービスレベルアグリーメント (SLA)
すべて開く同じ AWS リージョン内の複数のアベイラビリティーゾーンでタスクを実行しており、いずれかの月間課金期間中に月間稼働率が 99.9% 未満であった場合、Amazon Managed Service for Apache Flink SLA に基づいて Amazon Managed Service for Apache Flink に対する SLA サービスクレジットを受け取る資格があります。すべての SLA 契約条件の詳細と請求の提出方法の詳細については、 Amazon マネージドサービス for Apache Flink SLA の詳細ページをご覧ください。
今日お探しの情報は見つかりましたか?
ぜひご意見をお寄せください。ページのコンテンツ品質の向上のために役立てさせていただきます