HadoopTimes

実践機械学習
技術情報

【ホワイトボードウォークスルー 】Apache Flink:ストリーム処理におけるセーブポイント

mapr whiteboard walkthrough

今週のホワイトボードウォークスルーでは、Apache FlinkのPMCメンバー、 Data Artisansの最高技術責任者 (CTO) であるステファン・イーウェン氏が、Apache Flinkストリーム処理のユニークな機能であるセーブポイントを使用し、データの再処理、バグ修正、アップグレードへの対応、A / Bテストを行う方法を説明します。

 

ビデオの編集前のスクリプトは次の通りです。

こんにちは、 私はステファンと申します。オリジナルのApache Flinkの開発者の一人であり、Data Artisansの最高技術責任者 (CTO) です。 本日は、Apache Flinkのストリーム処理について少しお話ししたいと思います。 特に、セーブポイントと呼ばれるユニークな機能とストリーム処理における操作上の問題に対するセーブポイントの応用です。例えば、再処理方法、 実行中のプログラムのアップグレード、 バグ修正、 APテストに対する応用になります。

今回は、かなり古典的なストリーム処理の設定を前提としています。 私たちはMapR StreamsやApache Kafkaなどメッセージバスやログサービスを提供し、そのイベントはログに追加されていきます。 一方で、私たちにはApache Finkのストリームプロセッサがあり、ログからメッセージをピックアップし、これらのイベントについてストリーミング分析が行えます。

この例では、ストリームプロセッサが、イベントのセッション化に基づいて、一連の統計を計算します。 これらのセッションはセンサデータのバーストと考えることもできますし、または特定のサービスを使ったユーザーとの対話セッションであると考えることもできます。

ストリームプロセッサが、イベントをセッション化します。そして次に特定のセッションを外れ値として分類したり、単にセッションの長さを計算したり、またそれらを分類します。 一度このアプリケーションを設定してしまえば、継続的に実行されます。 イベントはメッセージバスに追加され、そしてストリームプロセッサがそれらをピックアップして追加し、セッション数を増やしていきます。

ある時点で、ストリーミングアプリケーションをアップグレードして、外れ値を分類するための新しい方法や、若干異なるセッション化を試すことや、アプリケーションのバグにより、データを再処理することもあるかもしれません。 そう言った場合は、1週間前の状態に戻りバグ修正版のプログラムを使用して、データを再処理するだけで、適切な結果にすべて変換されます。

この例をとってみてみましょう。 ストリーミングアプリケーションのような連続したアプリケーションでは、どのようにこれらを行うのでしょう? Apache Flinkでは、セーブポイント機能を使用します。 セーブポイント機能では、ストリーミングアプリケーション全体のポイントインタイムスナップショットを取ることができます。

そのポイントインタイムスナップショットは、入力ストリーム内の正確な時点の情報を含み、その時点で保留状態か、作動中のセッションであるか、すべての情報が含まれます。 概念的にはストリーミングアプリケーションを「停止」し、その状況を記録し、次の処理を継続すると考えることができます。 実際にはアプリケーションは停止せず、完全にバックグラウンドで実行されます。

どんなストリーミングアプリケーションを実行する場合も、ユーティリティを使用して、指定のタイミングでアプリケーションのセーブポイントを取る処理を実行すればいいのです。 セーブポイントは、通常、分散ファイルシステムのようなものに格納されます。

先ほど話したように、その時点でのストリーミングアプリケーション内での入力ストリームの場所に関するメタデータと、保留中の段階、ストリーミングアプリケーションの作動期間(それまでのセッション)におけるその時点での作動状態のデータを含みます。 この例では、このセッション自体は完成されているため含まれません。 また、まだ対処されなかったであろういかなる時点も含まれていません。ここでこのセーブポイントには、これら両方部分が含まれています。

次に行うことは、プログラムを使い、アプリケーションを停止し、特定のセーブポイントから指定のプログラムを再起動する処理をシステムに伝えればいいだけです。

これで概念的には、アプリケーション全体がセーブポイントをとった時点まで巻き戻されます。 また、プログラムの中の変更点を認識し、そのセーブポイントから再開することもできます。

こうして、プログラムをアップグレードするか、「セーブポイントから1週間戻ってプログラムをアップグレードする」と言った指定も可能です。 アップグレードの過程で、バグを参照し修正しなかった場合も、 もう一度戻って修正したバージョンで再処理することもできるでしょう。

他に、この機能が非常に便利になるのはABテストです。それでは、ここでプログラムのこのバリアントを「バリアントA」の呼びましょう ある時点で、リコメンダ―を改善する方法のアイデアがあり、それは、外れ値異常の分類を改善します。

このような場合には、プログラムAのセーブポイントを取り、そこに格納し、プログラムのバリアントBを記述します。 プログラムのBバリアントは、同じセーブポイントから開始することができます。 これは、バリアントAに同時に実行して、バリアントAのセーブポイントを取ったその時点を正確にピックアップします。それは、バリアントAから作動中のセッションをピックアップし、そこから計算を継続することによって可能になります。

セーブポイント機能は、厳格な方法でセーブポイントとジョブを実際に関連づけてはいません。そのため、BとAからは異なるセーブポイントを作成することも可能です。

プログラムBをプログラムAで作ったセーブポイントまで移動させたり、バリアントCをA、Bの後のセーブポイントから、またはAの後のセーブポイントから徐々にとっていくことも可能です。これは、ほとんど継続的なアプリケーション全体のスナップショット機能をバージョン管理するということです。 バージョン管理は、入力時点とその時点でのアプリケーションの状態の両方を管理します。

他に、この機能が非常に役立つケースとして、ある時点以降のデータが無くなるApache Kafkaのように、メッセージバスの容量が限られている場合が当てはまります。

開発者は、少なくともKafkaにデータがまだある時点までアプリケーションの状態を戻したいと思うかもしれませんが、セーブポイントを使用すれば、一切不要です。 ある時点のデータに依存する必要もありません。

この場合、セーブポイントを使うことで、データが無くなってしまったタイミングにかかわらず、自由に戻したい時点を選択することができます。なぜなら、フォールバックポイントが取得されているため、メッセージキュー内のデータに依存しないからです。

ご覧いただきありがとうございました。

著者情報

ステファン・イーウェン

ステファン・イーウェン

(DATA ARTISANS CTO)

「いまさら聞けない」データ分析の総ざらい

「いまさら聞けない」データ分析の総ざらい
昨今、「データ分析」の重要性が強く叫ばれています。ただ、それはアナリストやデータ・サイエンティストと呼ばれる“専門家だけが担うことができる難解なもの”という誤解を持たれてはいないでしょうか。

データ分析という手法は、IT のパワーを活用することで、どんな企業も導入・実践することができる“現実解”なのです。

データ分析とはいかなるものなのか――。

この資料では、これからデータ分析を始める方や始めたが、もう一度初歩知識を復習したい方々向けにデータ分析の基本を解説します。

無料ダウンロードはこちら

こちらの記事もおすすめです