Apache Flink とは何ですか?
Apache Flink は、無制限の (ストリーム) データセットと制限付き (バッチ) データセットをステートフルに処理するためのオープンソースの分散エンジンです。ストリーム処理アプリケーションは、最小限のダウンタイムで継続的に実行し、取り込まれたデータを処理するように設計されています。Apache Flink は、低レイテンシー処理、メモリ内での計算実行、高可用性、単一障害点の排除、水平スケーリングのために設計されています。
Apache Flink の機能には、1 回だけの一貫性保証がある高度な状態管理、高度な異常および遅延データ処理によるイベント時の処理セマンティクスが含まれます。Apache Flink はストリーミングファーストのために開発されており、ストリーム処理とバッチ処理の両方に統一されたプログラミングインターフェイスを提供します。
なぜ Apache Fink を使用するのでしょうか?
Apache Flink は幅広い機能を備えているため、さまざまな種類のストリーミングアプリケーションやバッチアプリケーションの構築に使用されます。
Apache Flink を利用する一般的なアプリケーションには、次のようなものがあります。
- イベント駆動型アプリケーション: 1 つ以上のイベントストリームからイベントを取り込み、計算、状態更新、または外部アクションを実行します。ステートフル処理では、シングルメッセージ変換以外のロジックを実装できます。シングルメッセージ変換では、結果は取り込まれたイベントの履歴に依存します。
- データ分析アプリケーション: データから情報や洞察を抽出します。従来は、有限のデータセットをクエリし、クエリを再実行するか、結果を修正して新しいデータを組み込むことで実行されていました。Apache Flink を使用すると、クエリを継続的に更新、ストリーミングしたり、取り込んだイベントをリアルタイムで処理したりして分析を実行し、結果を継続的に出力および更新できます。
- データパイプラインアプリケーション: あるデータストレージから別のデータストレージに移動するデータを変換して強化します。従来、抽出-変換-ロード (ETL) は定期的にバッチで実行されます。Apache Flink を使用すると、プロセスは継続的に動作し、データを低レイテンシーで宛先に移動できます。
Apache Flink はどのように機能しますか?
Flink は、高スループット、低レイテンシーのストリーム処理エンジンです。Flink アプリケーションは、ストリームと変換で構成される任意の複雑な非循環データフローグラフで構成されます。データは 1 つ以上のデータソースから取り込まれ、1 つ以上の宛先に送信されます。ソースシステムとターゲットシステムには、ストリーム、メッセージキュー、またはデータストアがあり、ファイル、一般的なデータベース、検索エンジンが含まれます。変換は、時間枠での集計や複雑なパターン検出のように、ステートフルにすることができます。
耐障害性は、以下の 2 つのメカニズムによって実現されます: アプリケーション状態の自動的かつ定期的なチェックポイント化。永続的ストレージにコピーされ、障害発生時に自動回復できるようにします; オンデマンドのセーブポイント。実行状態の一貫したイメージを保存して、Flink ジョブの停止と再開、更新、またはフォークを可能にし、停止および再起動後もアプリケーションの状態を保持します。チェックポイントとセーブポイントのメカニズムは非同期で、アプリケーションがイベントを処理し続けている間、「世界を停止する」ことなく一貫した状態のスナップショットを取得します。
Apache Flink にはどのようなメリットがありますか?
無制限の (ストリーム) データセットと制限付き (バッチ) データセットの両方を処理
Apache Flink は、無制限のデータセットと制限付きデータセット、つまりストリームとバッチデータの両方を処理できます。無制限のストリームには開始点がありますが、実質的に無制限であり、終了することはありません。理論的に、処理は停止することはありません。
テーブルのように、制限付きデータは有限であり、有限の時間で最初から最後まで処理できます。
Apache Flink は、同じプログラミングインターフェイスを通じて制限付き処理と無制限の処理の両方をサポートするアルゴリズムとデータ構造を提供します。無制限のデータを処理するアプリケーションは、継続的に実行されます。制限付きデータを処理するアプリケーションは、入力データセットの最後に達すると実行を終了します。
アプリケーションを大規模に実行
Apache Flink は、ステートフルアプリケーションを実質的にあらゆる規模で実行するように設計されています。処理は数千のタスクに並列化され、複数のマシンが同時に分散されます。
また、状態は水平方向に分割および分散されるため、複数のマシン間で数テラバイトを維持できます。状態は永続的ストレージに段階的にチェックポイント化されます。
インメモリパフォーマンス
アプリケーションを通過するデータおよび状態は、複数のマシンに分割されます。したがって、計算は、多くの場合メモリ内のローカルデータにアクセスすることで完了できます。
1 回限りの状態の一貫性
単一メッセージ変換以外のアプリケーションはステートフルです。ビジネスロジックは、イベントまたは中間結果を記憶する必要があります。Apache Flink は、障害が発生した場合やアプリケーションの停止と再起動の場合でも、内部状態の一貫性を保証します。各メッセージが内部状態に及ぼす影響は、アプリケーションがリカバリ時または再起動時にデータソースから重複データを受信する場合でも、常に 1 回だけ適用されます。
幅広いコネクタ
Apache Flink には、一般的なメッセージングとストリーミングシステム、データストア、検索エンジン、およびファイルシステムへの実証済みのコネクタが多数あります。例としては、Apache Kafka、Amazon Kinesis Data Streams、Amazon SQS、Active MQ、Rabbit MQ、NiFi、OpenSearch and ElasticSearch、DynamoDB、HBase、および JDBC クライアントを提供するあらゆるデータベースなどがあります。
複数レベルの抽象化
Apache Flink は、プログラミングインターフェイスに複数レベルの抽象化を提供します。より高いレベルのストリーミング SQL と Table API から、テーブル、結合、グループ化などの使い慣れた抽象化を使用しています。DataStream API では、ストリーム、ウィンドウ処理、およびマッピングのセマンティクスにより、抽象化レベルは低くなりますが、制御も強化されます。そして最後に、ProcessFunction API は各メッセージの処理を細かく制御し、状態を直接制御します。すべてのプログラミングインターフェイスは、無制限の (ストリーム) 日付セットと制限付き (テーブル) 日付セットの両方でシームレスに動作します。それぞれの問題を解決するための適切なツールとして、同じアプリケーションで異なるレベルの抽象化を使用できます。
複数のプログラミング言語
Apache Flink は、ハイレベルストリーミング SQL から Python、Scala、Java まで、複数の言語でプログラミングできます。また、Kotlin などの他の JVM 言語でもプログラミングできます。
Apache Flink のユースケースにはどのようなものがありますか?
Apache Flink のユースケースには以下が含まれます。
-
イベント駆動型アプリケーションのユースケースの例として、不正検出、異常検出、ルールベースのアラート、リアルタイム UX パーソナライゼーションなどが挙げられます。Flink は、イベントのストリームをステートフルに処理したり、時間の経過に伴う変化を考慮したり、複雑なパターンを検出したり、特定の時間枠にわたって統計を計算して予想されるしきい値からの偏差を検出したりする必要がある、これらすべてのユースケースに最適です。
-
品質モニタリング、ライブデータのアドホック分析、クリックストリーム分析、製品実験評価は、Flink が効率的にサポートできるストリーミング分析のユースケースです。SQL または Table API プログラミングインターフェイスの高度な抽象化を活用することで、ストリーミングライブデータと履歴データのバッチの両方に対して同じ分析を実行できます。
-
ファイルシステムのモニタリングとログへのデータの書き込み、イベントストリームのデータベースへの実体化、検索インデックスの段階的な構築と調整は、継続的な ETL によって効率的にサポートされるユースケースです。幅広いコネクタを活用して、Flink は複数のタイプのデータストアから直接読み取ったり、変更イベントのストリームを取り込んだり、変更を直接キャプチャしたりすることもできます。変更内容を継続的に取り込んで処理し、宛先システムを直接更新することで、Flink はデータ同期の遅延を数秒以下に短縮できます。
誰が Apache Flink を使っていますか?
NortonLifeLock
NortonLifeLock は、サイバーセキュリティとインターネットプライバシーのグローバル企業であり、何百万ものお客様にデバイスセキュリティ、家庭や家族向けのアイデンティティとオンラインプライバシーに関するサービスを提供しています。
NortonLifeLock は、ユーザーへのフリーミアムサービスとして VPN 製品を提供しています。したがって、フリーミアムユーザーが上限を超えたときにサービスを使用できないようにするには、使用制限をリアルタイムで適用する必要があります。NortonLifeLock にとっての課題は、これを信頼性が高く手頃な方法で実現することです。
NortonLifeLock は、Apache Flink を採用することで、ユーザーレベルとデバイスレベルの集計の実装を簡素化しました。
Samsung SmartThings
Samsung の独立子会社である SmartThings は、世界の主要な IoT エコシステムの 1 つであり、誰もがスマートホームを最も簡単に作成する方法を生み出しています。
Samsung SmartThings は、リソースを個々のアプリケーション専用にすることなどの問題に直面していました。これにより、データ処理中に遅延が発生し、パフォーマンスが低下しました。その結果、運用中のワークロードの維持に高額なオーバーヘッドが発生することになりました。データプラットフォームを再構築する必要がありました。
同社は Apache Spark から Apache Flink に移動しました。
BT Group
BT Group は、英国を代表する電気通信およびネットワークプロバイダーであり、180か国の顧客にサービスを提供するグローバルな通信サービスとソリューションの大手プロバイダーです。英国での主な活動には、固定音声、モバイル、ブロードバンド、TV (スポーツを含む)、およびコンバージドネットワーク、固定ネットワークおよびモバイルネットワークを介して消費者、企業、公共部門の顧客へさまざまな製品とサービスを提供することが含まれます。
BT は、英国のブロードバンドネットワーク上での高品位音声通話を可能にする新しい消費者向け製品である Digital Voice の展開をサポートするサービス監視アプリケーションを必要としていました。
BT は、Apache Flink を使用してサービスデータを取り込み、処理し、視覚化するイベント駆動型の分析サービスを構築しました。
Autodesk
3D 設計およびエンジニアリング用ソフトウェアの有数のプロバイダーである Autodesk では、ソフトウェアの作成と配信以上のことができないかと考えています。そして、世界中にいる数百万のユーザーが、そのソフトウェアを使って最高のエクスペリエンスを得るためにはどうしたらいいかとも考えています。
Autodesk では、新しい何かを生み出す人のためにソフトウェアを開発しています。同社は、2 億人以上の顧客にサービスを提供しています。顧客の問題をより早く見つけて解決するには、サイロ化を解消する必要がありました。コストを増大させたりデータロックインを発生させたりすることなく、小規模な運用チームで一貫した方法でメトリクスを収集して測定したいと考えていました。
NHL
National Hockey League は、北米の 4 つの主要なプロチームスポーツリーグの中で 2 番目に古いリーグです。現在、NHL は 32 の会員クラブで構成されており、それぞれがリーグの国際的な構造を反映しており、20 か国以上の選手がチームに登録されています。
NHL は、不確実性の高いイベントを予測するために必要な機能やモデリング方法の決定、ストリーミング PPT センサーデータを使用してフェイスオフが行われている場所、関係するプレーヤー、各プレーヤーがフェイスオフに勝つ確率を数百ミリ秒以内に特定する方法の決定など、いくつかの技術的課題に直面していました。
NHL は Apache Flink を活用して、フェイスオフの勝者を予測するだけでなく、多くの類似の問題をリアルタイムでコスト効率の高い方法で解決するための基盤を構築することができました。
Poshmark
Poshmark は、女性、男性、子供、ペット、家庭などに向けての新品および中古スタイルの大手ソーシャルマーケットプレイスです。米国、カナダ、オーストラリア、インドにまたがる 8,000 万人を超える同社のコミュニティは、ショッピングの未来をシンプルで、ソーシャルで、持続可能なものへと形作っています。
Poshmark は、パーソナライゼーションおよびユーザーエクスペリエンスの向上を通じて売上を伸ばすことに注力してきました。パーソナライゼーションとセキュリティのためにバッチ処理を使用するという当初のアプローチは、カスタマーエクスペリエンスの向上という期待に応えられませんでした。
Poshmark は、Apache Flink によるリアルタイムのデータエンリッチメントを使用してリアルタイムのパーソナライゼーションを設計しました。
AWS はクラウドで Apache Flink アプリケーションを実行するのにどのように役立ちますか?
Amazon Managed Service for Apache Flink は、Apache Flink アプリケーションを実行するための完全マネージド型ソリューションです。Amazon Managed Service for Apache Flink を利用すると、Apache Flink アプリケーションを構築し、管理し、AWS のサービスと統合する作業がシンプルになります。Amazon Managed Service for Apache Flink では、サーバーを管理する必要はなく、最低料金やセットアップ費用もありません。セットアップはデフォルトで高い可用性になっています。アプリケーションの状態は完全に管理され、耐障害性のために耐久性の高いバックエンドに保存されます。アプリケーションはシンプルな API で制御され、アプリケーションの停止、開始、設定、スケーリングを行います。
Amazon Managed Service for Apache Flink Studio は、Apache Flink へのインタラクティブなノートブックインターフェイスを提供します。Apache Zeppelin ノートブックを使用すると、Apache Flink で SQL、Python、Scala のコードを実行して、開発や実験、データ検査、可視化を行うことができます。
Amazon EMR は Apache Flink を YARN アプリケーションとしてもサポートしているため、クラスター内で他のアプリケーションを実行しながらリソースを管理できます。
Apache Flink は Kubernetes をネイティブにサポートしています。Amazon Elastic Kubernetes Service (Amazon EKS) のようなコンテナ化された環境で Apache Flink をセルフホストすることも、Amazon Elastic Compute Cloud (Amazon EC2) を使用して完全に自分で管理することもできます。
今すぐアカウントを作成して、AWS で Apache Flink の使用を開始しましょう。