Samza – Kafkaを生んだLinkedIn由来のストリームプロセッシングフレームワーク

11月27日(米国時間)、LinkedInは2013年から開発を進めてきた分散ストリームプロセッシングフレームワーク「Samza 1.0」のリリースを発表しました。現在はApache Software Foundationのもとでオープンソースソフトウェア「Apache Samza」として開発が続けられているSamzaですが、開発から5年を経て、大きなマイルストーンを無事に迎えたことになります。

LinkedInが生み出したストリーミングプラットフォームといえばKafkaが筆頭に挙げられますが、Kafkaは単なるストリーム処理技術というよりも、パブサブ(publish/subscribe)型の分散メッセージングシステムであり、リアルタイムストリーミングだけでなくHadoopなどのバッチシステムも組み込んだパイプラインとして構築されるケースも多いです。これに対しSamzaはKafkaにおけるストリーム処理の課題を解決するために開発された背景から、Kafkaよりもさらにエラスティックでリアルタイムなストリーム処理に特化しています。Kafka同様、スケーラビリティやフォルトトレランスにすぐれており、さらに1秒間に5万以上のメッセージを扱えるスループットの高さから、大規模な分散環境におけるストリーム処理基盤として、LinkedInのほかにもTripadviser、Tivo、Slack、Netflix、VMwareなどが採用しています。

なお、Samza開発者のひとりであるLinkedInのクリス・リッコミニ(Chris Riccomini)は「KafkaがHDFSなら、SamzaはMapReduceにあたる存在」とKafkaとSamzaの関係を表現しており、Smazaが”ストリームファースト”な実行エンジンであることを強調しています。また、ストリームプロセッシングがJVMベースの言語に限定されてきた経緯から、Samza自身はJavaとScalaによって実装されています。

Samzaは基本的にYARN上にデプロイされ、KafkaやHDFS、Amazon Kinesis、Azure Eventhubsなどのデータソースから取り込んだストリームデータをAPIで処理(ストリーミングETL、イベントベースアプリケーション、リアルタイムアナリティクスなど)し、出力先(Kafka、HDFS、ElasticSearchなど)にストリームデータとして結果を渡します。このストリームデータはほかのアプリケーションでも再利用可能です。なお、バージョン1.0からはYARNを必要としない、スタンドアロンモードでの実行も可能になりました。

Samzaはステートレスとステートフルの両方をサポートできるので、とくにステートフルなデータの処理をともなうリアルタイムアプリケーションの構築に向いています。また、デフォルトではメッセージが処理されたタイムスタンプをもとに処理が行われるしくみですが、イベントが発生したタイムスタンプをもとに処理を行うこともできるので、たとえばIoTセンサーのモニタリングや金融の不正検知などのケースではイベントタイムベースを選んでアプリケーションを作成する、といったことも可能です。なおイベントタイムベースの処理を実行するにはオープンソースのフレームワーク「Apache Beam」との連携が推奨されています。

余談ですが、Samzaのネーミングはフランツ・カフカの小説「変身」の主人公であるグレゴール・ザムザから取られているようです。急速に普及が拡がるKafkaですが、SamzaもまたKafkaの勢いに乗じて開発が進むことが期待されます。