Apacheは、 Kafka0.8 をリリー スした。これは Kafka が Apache ソフトウェア財団のトップレ ベルプロジェクトになって以降の最初のメジャーリリースである。Apache Kafka は publish-subscribe 型のメッセージングシステムであり、オフライン・オンライン両方のメッセージ取得に適している。これ は大容量のイベントとログデータを低遅延で収集および配信する目的で、当初は LinkedIn で開発された メッセージングシステムであった。最新リリースには クラスター内レプリケーション機能と、多重データ ディレクトをリサポートする機能が含まれている。リクエスト処理も非同期型に変更され、リクエスト処 理スレッドのセカンダリプールを用いて実装されている。ログファイルは世代によるローテション管理が 可能で、ログレベルもJMXを通じて動的に設定可能である。パフォーマンステスト用のツールも追加された。 これはパフォーマンス問題の解決や、潜在的なパフォーマンスの改善点を見つけるのを助けてくれるだろ う。
Kafka は分割型で、かつレプリカ対応型のコミットログサービスである。プロデューサはメッセージを 「Kafka トピックス」に対してパブリッシュ(送信)し、そして「コンシューマ」はそれらのトピックス にサブスクライブすることによってそのメッセージを消費(受信)する。Kafka クラスタにおけるサーバ は、ブローカと呼ばれる。各トピックに対して、Kafka クラスターはスケーリング、並行処理、そして フォールトトレラントに対応してパーティションを維持管理する。各々のパーティションは順序性をもっ たメッセージの不変シーケンスである。すなわちパーティションとは連続的に追加されるコミットログの ことを指している。パーティション内のメッセージは、それぞれに対して「オフセット」と呼ばれるシー ケンシャルなID番号を与えられる。
オフセットは、コンシューマによって制御される。典型的なコンシューマはリスト内の先頭のメッセージ を処理するが、Kafka クラスターは一定の期間は(この期間はユーザが設定可能)パブリッシュされたメッ セージ全てを保持しているので、どんな順序でメッセージを消費することも可能である。これにより、コ ンシューマはKafkaクラスタに大きなインパクトを与えることなく現れたり消えたりすることができ、 Hadoopクラスターのようなオフライン型のコンシューマも適用することができるので、コンシューマの構 造は非常に簡素なものになる。プロデューサは、どのトピックのどのパーティションにメッセージをパブ リッシュするかを選択することが可能である。コンシューマは自身をコンシューマグループ名に割り当て、 各々のメッセージは登録された各コンシューマグループ内の1つのコンシューマに配信される。もし全て のコンシューマが異なるコンシューマグループに属していると、メッセージは個々のコンシューマに向かっ てブロードキャストされる。
Kafka は 古典的なメッセージブローカのように使うこともできる。Kafka は高いスループットを持ち、 パーティション機能、レプリケーション機能、フォールトレラント機能を内蔵しているので、大規模なメッ セージ処理が必要なアプリケーションに適したソリューションの1つとなる。Kafka は大容量のWebサイト のアクティビティ・トラッキングにも使える。すなわち、サイト・アクティビティをパブリッシュしてリ アルタイムに処理したり、または Hadoop やオフラインのデータウェアハウスシステムにロードすること ができる。Kafka はログ収集システムとしても使える。ログ・ファイルを扱う代わりに、ログをメッセー ジのストリームとして扱うことができる。
Kafka は LinkeIn で使われており、平均すると172,000メッセージ/秒という連続的な負荷のもとで1日 あたり100億個書き込まれるメッセージを処理している。これは、Kafkaのデータを扱う内部および外部の アプリケーション双方からの多重サブスクライバー機能のヘビーな使用例である。ここでは発生したメッ セージ1つにつき、およそ5.5回のメッセージ消費が発生している。これは、リアルタイムコンシューマに 対して配信された 一日総計550億を超えるメッセージから得られた結果である。ユーザのアクティビティ に関するトピックとシステム運用上のトピック両方を合わせると367個のトピックがあり、最大で一日あた り平均92GB(バッチ処理で圧縮された容量)のデータ追加が発生していた。メッセージは7日間保存され、 全トピック全体での圧縮容量は平均約9.5TBである。ライブ(リアルタイムの)コンシューマに加えて、多 数の巨大な Hadoop クラスタ があり、オフラインのデータロード処理によって不定期で、高スループット、 かつ並列的に発生するバーストアクセスを行っている。
Kafkaについてもっと学ぶには、手始めに 公式 の Apache Kafka ドキュメント ページに アクセスし、そしてKafka をダウンロードすること。LinkedInからの論文 「LinkedInにおけるリアルタイム データパイプラインの構築」もある。この論文では、なぜ Kafka が作られたのか、またKafkaの設計 に影響を与えた要因について述べられている。