summary:
Pulsarは,2013年にYahoo!が自社のグローバルメッセージング基盤の再設計の一環として開発を開始し,2016年にオープンソース化された.その後,2018年にApache Software Foundationのインキュベータプロジェクトに採択され,2019年にトップレベルプロジェクトへと昇格している.現在では,Splunk,Verizon Media,Tencent,Comcast,Yahoo!などの大手企業で本番環境での利用が進んだ.
技術的には,Pulsarはメッセージブローカ[Pulsar Broker]とストレージ[Apache BookKeeper]を明確に分離する設計を取っており,これによってストレージのスケーリングと計算資源のスケーリングを独立して行える点が,Kafkaのようにブローカにストレージを一体化したアーキテクチャと根本的に異なる.この分離は,障害時の復旧,トピック数やメッセージ数の急増,あるいはマルチテナント環境における運用面での柔軟性に大きな優位をもたらす.
BookKeeperは分散ログストレージシステムとして,データの耐久性と一貫性を保証しながら,水平スケーリングが可能な設計になっている.これにより,Pulsarはメッセージングシステムとしての信頼性を維持しつつ,ストレージ容量を柔軟に拡張できる.
さらにPulsarは,Kafkaがトピック単位でパーティションとリーダーを固定的に管理するのに対し,より動的かつ柔軟なコンシューマグループ管理を可能としており,Push/Pullの両方式をサポートするほか,非同期通信,長期保持,サブスクリプションモード[Exclusive, Shared, Failover, Key_Shared]などの多様な機能をネイティブで備えている.
特に,Pulsarのサブスクリプションモデルは以下の特徴を持つ:
また,Geo-レプリケーション機能により,複数のデータセンターにまたがるグローバルなメッセージング基盤を構築できる点も重要な特徴である.
Spark StreamingやStructured Streamingと比較した場合,Pulsarは処理系というよりは通信と永続化のファブリックであり,リアルタイム性やイベント駆動アーキテクチャにおいて中核的な役割を担うものである.特に,Pulsar Functionsという軽量なストリーム処理機構や,Pulsar IOによる外部システムとの接続機構により,分散メッセージングと簡易な計算処理を統合的に行えるため,ETLパイプラインやIoT,金融取引,ログ処理などに適している.
Pulsar Functionsはサーバーレスコンピューティングモデルを採用しており,Javaや Python,Goなどの言語でシンプルな処理ロジックを記述し,メッセージの流れの中に組み込むことができる.これにより,複雑なストリーム処理フレームワークを導入することなく,軽量な変換やフィルタリング処理を実現できる.
また,クラウドネイティブな運用を強く意識した設計になっており,Kubernetesとの親和性,Tiered Storageによるオブジェクトストレージ連携[Amazon S3,Google Cloud Storage,Azure Blob Storageなど],ネームスペースとテナント管理,スキーマレジストリなど,クラウド環境下で求められる管理・統合機能が揃っている.
スキーマレジストリは,Avro,JSON Schema,ProtoBufなどの形式をサポートし,スキーマの進化[Evolution]を管理することで,プロデューサーとコンシューマー間のデータ互換性を確保する.
Pulsarは2.7.0以降,トランザクション機能をサポートしており,複数のトピックにまたがるメッセージの一貫性のある処理や,Exactly-Once Semantics[厳密に一度だけの処理保証]を実現できる.これは,金融取引やクリティカルなビジネスプロセスにおいて重要な機能である.
Pulsarは豊富なクライアントライブラリ[Java, Python, Go, C++, C#など]を提供し,さまざまな言語やフレームワークとの統合を容易にしている.また,Kafka API互換レイヤーを備えており,既存のKafkaアプリケーションを少ない変更でPulsarに移行できる.
Mathematics is the language with which God has written the universe.