QCon New York 2016で行われたプレゼンテーション“Large-Scale Stream Processing with Apache Kafka”の中で,Neha Narkhede氏は,ストリーミングデータを処理するKafkaの新機能であるKafka Streamを紹介した。アンバウンドなデータが多く見られるようになったことにより,ストリーミング処理は一般的なものになった,とNarkhede氏は言う。マシンラーニングの例でも見られるように,もはやニッチな問題ではないのだ。
Narkhede氏の講演は,データを扱う上での基本的なプログラミングパラダイムの紹介から始まった。
- 要求/応答サイクル
- バッチ処理
- ストリーム処理
続いてリテールの領域から,ストリーミング処理に関する実例を紹介した。販売と出荷は基本的にアンバウンドなデータセットであり,このようなデータセットは効率的にストリーミング処理することができる。販売と出荷は,イベント(“何が起きたか”)のストリームと,これらイベントに基づいた価格の再計算機能(“何かを行う”)というストリーム処理なのだ。
次のNarkhede氏は,ストリーム処理を考える上で今日の開発者に許されている,2つの主要な選択肢について言及した。ひとつはDo-It-Yourselfアプローチである。これは単純なシナリオには有効かも知れないが,オーダリングやスケーラビリティ,フォールトトレランス,あるいは過去データといった処理の複雑性には対処できない。第2に開発者が選択できるのは,SparkやSamzaといった,主にMapReduceを用いたヘビーウェイトなソリューションの採用だ。しかしながら,ストリーム処理はMapReduceよりもイベントベースのマイクロサービスに近い,というのが氏の意見であり,これがKafka Streamsを開発した理由ともなっている。
Kafka Streamsは,パッケージングやデプロイメント上の制約なく,アプリケーションに組み込み可能な軽量ライブラである。続いてNarkhede氏は,ストリーム処理システムの重要な機能がKafka Streamsでどのように実現されているのか,その概要を説明した。
- イベントログをパーティショニングすることで,スケーラビリティは自然に実現される。すなわち,Kafka Streamsベースのアプリケーションは,クラスタを形成することが可能なのだ。ユーザ向けライブラリには並列データ処理の支援もある。
- フォールトトレランスも最初から提供されている。Kafka Streamのクラスタにはマスタがなく,すべて対等だ。ローカル状態はある程度キャッシュされているので,ノードが停止した場合でも,データ処理は単に別のノードにシフトすることができる。
- ジョインやウィンドウ演算で必要とされるような,ステートフルな処理もサポートする。このような場合には,必要なデータがプロセッサにプッシュされることで,リモートアクセスの発生を回避している。
- 新たなコンシューマがオフセット0で(先頭から)イベント処理を開始することによって,ビジネスロジック変更によるデータの再処理をサポートする。
Narkhede氏は次に,所定の機能を実装する上での基本的概念として,Kafka Streamsの二重性を紹介している。これは基本的に,テーブル(“現在の状態”)の概念と,ストリーム(“状態がどのように進化したか”)を組み合わせたものだ。従ってKafka Streamsベースのアプリケーションでは,リアクティブとステートフルの並立が可能になる。2つの概念を備えることは,結果としてアーキテクチャの簡素化にも寄与する。
Neha Narkhede氏は最後に,データベースやHadoop,Elastic Searchといったシステムと結合することで,Kafkaとデータ入出力を行なうサブプロジェクトであるKafka Connectについても簡単に説明して,自身の講演を終えている。
なお,カンファレンス終了後の数週間で無償公開されるのは,QConのプレゼンテーションの一部である点について了承頂きたい。
この記事を評価
- 編集者評
- 編集長アクション