Apache Pulsar とイベント駆動型アーキテクチャの実踐

はじめに

イベント駆動型アーキテクチャは、システム內の変化を即時的に反映し、柔軟な処理フローを実現するための設計パターンです。このアーキテクチャでは、プロダクションとコンシューマーが直接通信せず、メッセージ代理を介して非同期に通信します。Apache Pulsar は、このイベント駆動型アーキテクチャを支える分散型 Pub/Sub メッセージングシステムであり、スケーラビリティと信頼性を実現するための強力なツールです。本記事では、Pulsar の特徴、Pulsar Functions と Function Mesh の活用方法、自動スケーリングの実裝について詳しく解説します。

技術の定義と基本概念

Pub/Sub メッセージングシステム

Pub/Sub(Publish/Subscribe)は、メッセージを発行者(プロダクション)とサブスクライバー(コンシューマー)の間で非同期に配信する通信モデルです。Pulsar は、このモデルを基盤として、水平スケーラビリティ、高可用性、および複雑なメッセージルーティングを実現しています。

Apache Pulsar の特徴

  • 水平スケーラビリティ:複數のブローカー節點を用いて、データを分散して保存し、従來のメッセージングシステム(例:RabbitMQ)のディスクストレージ制限を迴避します。
  • メッセージルーティング:獨佔サブスクリプション(Exclusive Subscription)と共有サブスクリプション(Shared Subscription)をサポートし、競合コンシューマーのモデルを実現します。
  • 信頼性:メッセージの確認メカニズムにより、重複処理を防ぎ、確実な配信を保証します。

Pulsar Functions の設計

Pulsar Functions は、イベントストリームを処理する軽量なコンピューティングフレームワークで、以下の特徴を持ちます:

  • 実行モード:ブローカー線程モード、獨立プロセスモード、Kubernetes モードの3つの選択肢を提供。
  • API デザイン:単純な processMessage メソッドを用いたインターフェースで、入出力トピックの自動ルーティングをサポート。
  • 拡張性:ログ記録、メトリクス、內部データベースの更新など、複數の拡張機能を提供。

Function Mesh と Kubernetes の統合

Function Mesh は、Kubernetes 上で複數の Pulsar Functions を管理するための Operator であり、以下の機能を提供します:

組件アーキテクチャ

  • Kubernetes Operator:カスタムリソース定義(CRD)を監視し、StatefulSet などの Kubernetes リソースを自動生成。
  • Function Runner:Java/Python/Go などの言語で実行可能な処理ロジックを提供。

配置例

apiVersion: pulsar.apache.org/v1beta1
kind: FunctionMesh
metadata:
  name: order-processing
spec:
  functions:
    - name: order-validator
      className: com.example.OrderValidator
      image: pulsar-functions:latest
      replicas: 3
      inputTopics: ["orders"]
      outputTopics: ["validated-orders"]
      resources:
        limits:
          memory: "2Gi"
          cpu: "1"

インテグレーション能力

  • IO コネクター:Debezium CDC、S3 同期などの外部システムとの連攜をサポート。
  • CI/CD パイプライン:Argo CD などのツールと連攜し、自動デプロイを実現。
  • イベント処理パイプライン:データソース → 処理 → ストレージ → 分析の連続処理を可能に。

自動スケーリングの実裝

水平スケーリング(HPA)

  • メトリクスサーバーの活用:Kubernetes の CPU 使用率を監視し、閾値を超えた場合に Pod 數を自動増減。
  • 共有サブスクリプションとの連攜:重複処理を防ぐため、競合コンシューマーのモデルを採用。

垂直スケーリング(VPA)

  • リソースの動的調整:CPU またはメモリの使用率に基づき、Pod のリソース配分を自動最適化。
  • Exactly Once 處理の要件:リソースの過剰使用を防ぐため、リクエストとリミットの設定を厳密に管理。

テストケース

  • CPU 密集型負荷:質數計算などの処理を並列実行し、CPU 使用率を上昇させた場合のスケーリング動作。
  • メモリ 密集型負荷:大規模な文字列リストの生成により、メモリ使用率を上昇させた場合のスケーリング動作。

技術の優位性と課題

優勢

  • 高スケーラビリティ:Kubernetes との統合により、水平および垂直スケーリングを実現。
  • 柔軟な言語サポート:Java、Python、Go など多様な言語での処理が可能。
  • 信頼性:メッセージの確認メカニズムとデータ保持戦略により、信頼性の高い処理が可能。

課題

  • 狀態管理の制限:內蔵のチェックポイント機能が不足し、外部の狀態ストレージとの連攜が必要。
  • 設定の複雑さ:Kubernetes との統合により、初期設定や自動スケーリングの設定が複雑になる可能性。

結論

Apache Pulsar は、イベント駆動型アプリケーションを構築するための強力なメッセージングシステムであり、Pulsar Functions と Function Mesh の組み合わせにより、柔軟で信頼性の高い処理パイプラインを実現できます。自動スケーリング機能は、Kubernetes との統合により、負荷に応じたリソースの最適化を可能にし、システムの可用性を向上させます。実裝時には、メトリクスサーバーの設定やリソースの適切な管理が重要であり、適切な設計により、高スケーラビリティなイベント駆動型アーキテクチャを構築できます。