コンテンツにスキップ

Apache Kafka

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Tarstassratsa (会話 | 投稿記録) による 2023年2月5日 (日) 20:07個人設定で未設定ならUTC)時点の版 (en:Apache Kafka08:42, 18 January 2023‎より翻訳)であり、現在の版とは大きく異なる場合があります。

Apache Kafka[1]
作者 LinkedIn
開発元 Apache Software Foundation
初版 2011年1月 (13年前) (2011-01)[2]
最新版
3.8.0[3] ウィキデータを編集 / 26 7月 2024
リポジトリ ウィキデータを編集
プログラミング
言語
Scala, Java
対応OS クロスプラットフォーム
種別 ストリーム・プロセッシング, メッセージブローカー
ライセンス Apache License 2.0
公式サイト kafka.apache.org ウィキデータを編集
テンプレートを表示

Apache Kafkaは、分散型イベントストアおよびストリーム処理プラットフォームである。Apacheソフトウェア財団によって開発されたオープンソースのシステムで、JavaScalaで記述されている。このプロジェクトは、リアルタイムのデータフィードを処理するための、統一された、高スループット、低レイテンシーのプラットフォームを提供することを目的としている。Kafkaは、Kafka Connectを介して外部システムとの接続(データのインポート/エクスポート)が可能で、ストリーム処理アプリケーション向けにKafka Streamsライブラリを提供している。Kafkaは、効率性を高めるために最適化されたバイナリTCPベースのプロトコルを使用し、ネットワークのラウンドトリップのオーバーヘッドを削減するためにメッセージを自然にグループ化する「メッセージセット」抽象化に依存している。これにより、"より大きなネットワークパケット、より大きなシーケンシャルディスク操作、連続したメモリブロック[...]を実現し、Kafkaはランダムメッセージ書き込みのバースト的ストリームを線形書き込みに変えることができる。[4]"

歴史

Kafkaは元々LinkedInで開発され、その後2011年初めにオープンソース化された。Jay Kreps、Neha Narkhede、Jun RaoがKafkaの共同開発に協力した[5]。2012年10月23日にApache Incubatorから卒業した[6]。Jay Krepsは、「書くことに最適化されたシステム」であり、カフカの作品が好きだったことから、作者であるフランツ・カフカにちなんでこのソフトウェアの名前を選んだ[7]

アプリケーション

Apache Kafkaはコミットログをベースにしており、ユーザーはそれをサブスクライブして、任意の数のシステムやリアルタイムアプリケーションにデータを公開することができる。アプリケーションの例としては、Uberにおける乗客とドライバーのマッチング管理、ブリティッシュガスのスマートホームにおけるリアルタイム分析および予測メンテナンスの提供、LinkedIn全体における多数のリアルタイムサービスの実行などが挙げられる[8]

アーキテクチャ

Kafkaの概要


Kafkaは、プロデューサーと呼ばれる任意の数のプロセスから送られてくるKey-Valueメッセージを保存する。データは、異なる「トピック」内の異なる「パーティション」に分割することができる。パーティション内では、メッセージはオフセット(パーティション内でのメッセージの位置)で厳密に並べられ、タイムスタンプとともにインデックス化されて保存される。コンシューマー」と呼ばれる他のプロセスは、パーティションからメッセージを読み取ることができる。ストリーム処理については、KafkaはStreams APIを提供しており、Kafkaからデータを消費し、結果をKafkaに書き戻すJavaアプリケーションを書くことができる。また、Apache Kafkaは、Apache Apex、Apache Beam、Apache Flink、Apache Spark、Apache Storm、Apache NiFiなどの外部のストリーム処理システムとも連動している。

Kafkaは1台以上のサーバー(ブローカーと呼ばれる)からなるクラスタ上で動作し、すべてのトピックのパーティションがクラスタノードに分散される。さらに、パーティションは複数のブローカーにレプリケートされる。このアーキテクチャにより、Kafkaは大量のメッセージストリームをフォールトトレラントな方法で配信でき、Java Message Service (JMS), Advanced Message Queuing Protocol (AMQP) などの従来のメッセージングシステムの一部を代替できるようになった。0.11.0.0リリース以降、Kafkaはトランザクション書き込みを提供し、Streams APIを使用してジャストワンスストリーム処理を実現する。

Kafkaは2種類のトピックをサポートしている。通常のトピックとコンパクトなトピックの2種類である。通常のトピックは、保持時間またはスペースバウンドで設定できる。指定された保持時間よりも古いレコードが存在する場合、またはパーティションのスペースバウンドを超える場合、Kafkaはストレージスペースを解放するために古いデータを削除することが許可される。デフォルトでは、トピックの保存期間は7日に設定されてうが、データを無期限に保存することも可能である。コンパクト化されたトピックでは、レコードは時間や空間の境界に基づいて期限切れになることはない。その代わり、Kafkaは同じキーを持つ古いメッセージの更新として後のメッセージを扱い、キーごとに最新のメッセージを決して削除しないことを保証する。ユーザーは、特定のキーにNULL値を持ついわゆる墓標メッセージを書くことで、メッセージを完全に削除することができる。

Kafkaには、5つの主要なAPIがある。

  • プロデューサーAPI - アプリケーションがレコードのストリームを公開することを許可する。
  • コンシューマーAPI - アプリケーションがトピックにサブスクライブし、レコードのストリームを処理することを許可する。
  • Connector API - 既存のアプリケーションにトピックをリンクさせることができる、再利用可能なプロデューサーとコンシューマーのAPIを実行する。
  • Streams API - このAPIは、入力ストリームを出力に変換し、結果を生成する。
  • Admin API - Kafkaトピック、ブローカー、およびその他のKafkaオブジェクトを管理するために使用される。

コンシューマーAPIとプロデューサーAPIは、基盤となるメッセージングプロトコルによってKafkaのコア機能から切り離されている。これにより、KafkaにバンドルされているJava APIと同様に効率的で、あらゆるプログラミング言語で互換性のあるAPIレイヤーを記述することができる。Apache Kafkaプロジェクトは、このようなサードパーティAPIのリストを管理している。

Kafka API

コネクトAPI

Kafka Connect(またはConnect API)は、他のシステムとの間でデータをインポート/エクスポートするためのフレームワークである。Kafka 0.9.0.0リリースで追加され、内部でProducerとConsumer APIを使用する。Connectフレームワーク自体は、他のシステムからデータを読み書きするための実際のロジックを実装する、いわゆる「コネクター」を実行する。Connect APIは、カスタムコネクタを構築するために実装しなければならないプログラミングインターフェースを定義している。一般的なデータシステム向けのオープンソースおよび商用のコネクターは、すでに多数提供されている。しかし、Apache Kafka自体には、プロダクションレディのコネクターは含まれていない。

ストリームAPI

Kafka Streams(またはStreams API)は、Javaで記述されたストリーム処理ライブラリである。Kafka 0.10.0.0リリースで追加された。このライブラリにより、拡張性、伸縮性、耐障害性に優れたステートフルなストリーム処理アプリケーションを開発することができる。主なAPIはストリーム処理用のDSLで、フィルタ、マップ、グループ化、ウィンドウ、集約、結合、テーブルの概念といった高レベルの演算子を提供する。また、Processor APIを用いることで、より低レベルな開発手法であるカスタムオペレータを実装することができる。また、DSLとProcessor APIを混在させることも可能である。ステートフルなストリーム処理のために、Kafka StreamsはRocksDBを使ってローカルな演算子の状態を保持する。RocksDBはディスクへの書き込みが可能なため、保持される状態は利用可能なメインメモリよりも大きくなる可能性がある。また、フォールトトレランスの観点から、ローカルのステートストアへの更新はすべてKafkaクラスタのトピックに書き込まれる。このため、これらのトピックを読み込むことで状態を再現し、すべてのデータをRocksDBに送り込むことができる。Streams APIの最新バージョンは2.8.0である[9]。リンク先には、最新版へのアップグレード方法も記載されている[10]

バージョンの互換性

バージョン0.9.xまでのKafkaブローカーは、古いクライアントとのみ後方互換性がある。Kafka 0.10.0.0以降では、ブローカーは新しいクライアントとの前方互換性もある。新しいクライアントが古いブローカーに接続した場合、ブローカーがサポートする機能のみを使用することができる。Streams APIについては、バージョン0.10.1.0から完全な互換性がある。0.10.1.0のKafka Streamsアプリケーションは、0.10.0や古いブローカーと互換性はない。

パフォーマンス

エンドツーエンドのパフォーマンスを監視するには、ブローカー、コンシューマー、プロデューサーのメトリクスを追跡する必要があり、さらにKafkaがコンシューマー間の調整に使用しているZooKeeperも監視する必要がある[11][12]。現在、Kafkaのパフォーマンスを追跡するためのモニタリング・プラットフォームがいくつか存在する。これらのプラットフォームに加えて、Kafkaデータの収集は、JConsoleを含む、一般的にJavaにバンドルされているツールを使用して実行することもできる[13]

関連項目

参考文献

  1. ^ Apache Kafka at GitHub”. github.com. 5 March 2018閲覧。
  2. ^ Open-sourcing Kafka, LinkedIn's distributed message queue”. 27 October 2016閲覧。
  3. ^ Release 3.8.0” (26 7月 2024). 20 8月 2024閲覧。
  4. ^ Efficiency”. kafka.apache.org. 2019年9月19日閲覧。
  5. ^ Li, S. (2020).
  6. ^ Apache Incubator: Kafka Incubation Status”. Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
  7. ^ What is the relation between Kafka, the writer, and Apache Kafka, the distributed messaging system?”. Quora. 2017年6月12日閲覧。
  8. ^ What is Apache Kafka”. confluent.io. 2018年5月4日閲覧。
  9. ^ Apache Kafka” (英語). Apache Kafka. 2021年9月10日閲覧。
  10. ^ Apache Kafka” (英語). Apache Kafka. 2021年9月10日閲覧。
  11. ^ Monitoring Kafka performance metrics” (英語) (2016年4月6日). 2016年10月5日閲覧。
  12. ^ Mouzakitis (2016年4月6日). “Monitoring Kafka performance metrics” (英語). datadoghq.com. 2016年10月5日閲覧。
  13. ^ Collecting Kafka performance metrics - Datadog” (英語) (2016年4月6日). 2016年10月5日閲覧。

外部リンク