Amazon Managed Service for Apache Flinkによるストリーム処理
Amazon Managed Service for Apache Flinkの役割、ストリーミング分析、Studioノートブック、Apache Beamとの関係、スケーリングと料金を学びます。
ストリームを継続的に分析するApache Flink
Apache Flinkは、到着し続けるイベントを継続的に処理するためのオープンソースの分散処理エンジンです。イベントの変換、集計、複数ストリームの結合、時間窓ごとの計算などを、データが届くたびに実行できます。過去のまとまりを一括処理するバッチ処理に対して、ストリーム処理は現在進行中のデータから低遅延で結果を得たい場合に適しています。
たとえば、倉庫内の温湿度センサーが測定イベントを継続して送るシステムでは、Flinkで設備や区画ごとの値を短い時間幅で集約できます。集計結果を別のストリームへ書き込み、後続のアプリケーションで運用画面を更新したり、異常の可能性がある区画を担当者へ知らせたりできます。
Managed Service for Apache Flinkの役割
Amazon Managed Service for Apache Flinkは、FlinkアプリケーションをAWS上で開発・実行するためのマネージドサービスです。以前はAmazon Kinesis Data Analytics for Apache Flinkと呼ばれていましたが、2023年に現在のサービス名へ変更されました。
Flinkのクラスターを自分で構築して運用する場合、コンピューティング基盤の準備、リソース調整、障害復旧、監視などを設計しなければなりません。Managed Service for Apache Flinkでは、AWSがアプリケーションを実行する基盤やFlinkクラスターの運用を担います。これにより、開発者は業務上必要な変換・集計ロジックに集中しやすくなります。
ただし、「フルマネージド」は処理アプリケーションの設計までAWSへ任せられるという意味ではありません。入力データの選定、Flinkの処理内容、出力先、IAM実行ロール、アプリケーションの構成、容量や監視の検討は引き続き必要です。マネージドサービスがインフラ運用を減らし、Flinkの処理機能を利用できるようにする、と捉えましょう。
低遅延処理と自動スケーリング
Flinkはイベントの到着に応じて処理を続けるため、集計結果を低遅延で得るアプリケーションを構築できます。実際に結果が利用可能になるまでの時間は、入力元の遅延、処理の複雑さ、データ量、出力先の性能、チェックポイントなど複数の要素に左右されます。「ミリ秒単位で処理可能」は能力の目安であり、どの構成でも必ずミリ秒で応答するという保証ではありません。
Managed Service for Apache Flinkは、アプリケーションが使うコンピューティング容量を**Kinesis Processing Unit(KPU)**で管理します。1 KPUは1 vCPUと4 GBのメモリを備えます。自動スケーリングは既定で有効で、CPU使用率などを基にアプリケーションの並列度と利用容量を調整し、入力データ量や処理内容の変化に対応します。
自動スケーリングも即時に無制限の容量を追加する機能ではありません。アプリケーションの並列化の仕方、処理が集中する箇所、利用可能なKPUの上限などが処理能力に影響します。入力に対する処理の遅れを示すメトリクスやCPU使用率を監視し、負荷の増加時に処理が追いついているかを確認します。
入力と出力をつなぐ処理アプリケーション
Flinkアプリケーションは、データソースからイベントを読み取り、演算子を通じて変換・集計し、シンクと呼ばれる出力先へ結果を書き込みます。AWSのサービス向けコネクターを利用すると、Kinesis Data StreamsやAmazon Managed Streaming for Apache Kafka(Amazon MSK)、Amazon S3などをデータの入出力に使えます。用途に応じてAmazon DynamoDB、Amazon OpenSearch Service、Amazon Data Firehoseなどへ連携する構成もあります。
たとえば、センサーイベントをKinesis Data Streamsから読み込み、設備IDごとに直近の測定値を集計して、結果を別のData Streamsへ書き出せます。Lambdaなどの後続処理はその集計結果を利用し、通知や画面更新を行います。Flinkを処理層として挟むことで、データの送信元と利用側を直接結び付けずにストリーミング処理を追加できます。
SQL、Flink API、Apache Beam
Flinkの処理を記述する方法には、低レベルのストリーム処理に向くDataStream API、表形式のデータを扱うTable API、宣言的に問い合わせや変換を書くFlink SQLがあります。通常の長時間実行アプリケーションでは、Java、Scala、Pythonなどの言語とFlink APIを使って処理を実装し、アプリケーションとして実行します。SQLを利用する場合も、どのストリームを読み、どの条件で変換し、どこへ結果を出すかを定義する必要があります。
Managed Service for Apache Flinkは、Apache Beamで作成したストリーミングパイプラインもサポートします。Beamはデータ処理パイプラインを記述するためのフレームワークで、Managed Service for Apache FlinkではFlinkランナーがBeamパイプラインを実行します。Beamを使う場合は、Flinkが処理エンジンとして動く関係を押さえておきましょう。
Studioノートブックで対話的に調べる
Amazon Managed Service for Apache Flink Studioは、ストリームデータを対話的に調査し、クエリや処理アプリケーションを試すためのノートブック環境です。Studioノートブックは、Webベースのノートブック環境であるApache Zeppelinと、実際のストリーム処理エンジンであるApache Flinkを組み合わせています。ノートブック上でクエリを実行し、その結果を同じ作業画面で確認したり可視化したりできます。
Studioでは標準SQL、Python、Scalaを使ってストリームを対話的に分析できます。検証した処理は、継続実行するFlinkアプリケーションへ発展させることもできます。たとえば、まず特定のセンサーデータをSQLで絞り込み、結果や集計方法を確認してから、常時稼働する処理として運用する流れです。
Apache Zeppelinは複数のインタープリターを扱える汎用ノートブック基盤ですが、Zeppelin一般の対応言語や連携先がすべてManaged Service for Apache Flink Studioで利用できるわけではありません。StudioではFlinkを使ったストリーム分析に用いるSQL、Python、Scalaの機能を中心に理解してください。Apache Spark、JDBC、シェルなどZeppelinの一般的な拡張機能が、StudioのFlink処理機能に含まれると考えないようにします。
課金と利用時の考え方
Managed Service for Apache Flinkの料金は、アプリケーションが利用するKPUの稼働時間などに基づきます。実行アプリケーションでは、処理用KPUに加えてオーケストレーション用リソースやアプリケーションストレージ、任意のバックアップなども料金に関係します。Studioのインタラクティブモードには、そのモード固有の追加リソース料金があります。実際の料金はリージョン、実行時間、利用容量、ストレージやバックアップの設定によって異なるため、設計時には最新の料金ページを確認します。
サービスを選択する際は、Data Streamsのようなストリームを保持・配信するサービスと、Flinkのようにストリームに継続的な計算を適用するサービスを区別します。マネージドなFlink環境で状態を持つ分析、時間窓の集計、継続的な変換などを実行したい場合、Managed Service for Apache Flinkが候補になります。入力を受け取って保存先へ配信することが中心で、独自の計算処理が不要なら、Amazon Data Firehoseなど別のサービスが適する場合があります。
公式ドキュメント
重要ポイント
- ▸Managed Service for Apache Flinkは、Apache Flinkのストリーム処理アプリケーションをAWS上で実行するマネージドサービスである
- ▸Flinkは到着し続けるデータを継続的に変換・集計し、状態を持つ処理や時間窓の分析を低遅延で行える
- ▸FlinkアプリケーションはDataStream APIやTable API、SQLを利用でき、Apache BeamのストリーミングパイプラインもFlinkランナーで実行できる
- ▸StudioノートブックはApache ZeppelinとFlinkを組み合わせ、SQL、Python、Scalaで対話的に分析できる開発環境である
- ▸AWSが基盤やクラスター運用を担う一方、処理ロジック、データ接続、IAM権限、容量設計や監視の判断は必要である
- ▸自動スケーリングは処理負荷への対応を助けるが、遅延のない処理を保証するものではなく、KPUの利用量などに応じて料金が発生する
このトピックの学習を完了しますか?
完了状態はいつでも切り替えられます
この試験ドメイン内で次の学習に進む
同じサービスの関連トピック
連携サービス に関連するトピックを続けて確認できます。