コンテンツにスキップ

「Apache Kafka」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
編集の要約なし
m -{{Sakujo}}
 
(2人の利用者による、間の9版が非表示)
1行目: 1行目:
{{Infobox software
<!-- 削除についての議論が終了するまで、下記のメッセージ部分は除去しないでください。もしあなたがこのテンプレートを除去した場合、差し戻されます。またページが保護されることもあります。 -->
{{Sakujo/本体|2023年2月6日|Apache Kafka}}
<!-- 削除についての議論が終了するまで、上記部分は削除しないでください。 -->{{Infobox software
| title = Apache Kafka<ref>{{cite web|url=https://github.com/apache/kafka|title=Apache Kafka at GitHub|work=github.com|access-date=5 March 2018}}</ref>
| title = Apache Kafka<ref>{{cite web|url=https://github.com/apache/kafka|title=Apache Kafka at GitHub|work=github.com|access-date=5 March 2018}}</ref>
| name = Apache Kafka
| name = Apache Kafka
17行目: 15行目:
| website = {{Official URL}}
| website = {{Official URL}}
| logo size = 64px
| logo size = 64px
}}'''Apache Kafka'''は、[[分散コンピューティング|分散]]型イベントストアおよび[[ストリーム・プロセッシング|ストリーム処理]]プラットフォームである。[[Apacheソフトウェア財団]]によって開発された[[オープンソース]]のシステムで、[[Java]]と[[Scala]]で記述されている。このプロジェクトは、リアルタイムのデータフィードを処理するための、統一された高スループットレイテンシーのプラットフォームを提供することを目的としている。Kafkaは、Kafka Connectを介して外部システムと接続データのインポート/エクスポート可能で、ストリーム処理アプリケーション向けKafka Streams[[ライブラリ]]提供ている。Kafkaは、効率高めるために最適化されたバイナリ[[Transmission Control Protocol|TCP]]ベースのプロトコル使用しトワクのラウンドリップオーバーヘッドを削減するためにメッセージを自然にグループ化する「メッセージセット」抽象化依存している。これにより、"より大きなネットワークパケット、より大きなシーケンシャルディスク操作、連続したメモリブロック[...]を実現し、Kafkaはランダムメッセージ書き込みのバースト的ストリームを線形書き込みに変えることができる<ref>{{Cite web |url=https://kafka.apache.org/documentation/#maximizingefficiency |title=Efficiency |website=kafka.apache.org |access-date=2019-09-19}}</ref>"
}}'''Apache Kafka'''は、[[分散コンピューティング|分散]]型イベントストアおよび[[ストリーム・プロセッシング|ストリーム処理]]プラットフォームである。[[Apacheソフトウェア財団]]が管理する[[オープンソース]]のシステムで、[[Java]]と[[Scala]]を用いて実装されている。このプロジェクトは、リアルタイムのデータフィードを処理するための、統一された高スループット遅延のプラットフォームを提供することを目的としている。Kafka Connectと呼ばれるフレームワーク用いることにより、外部システムと接続データのインポート/エクスポートを行うことができるほか、ストリーム処理を行うアプリケーション向けKafka Streams[[ライブラリ]]提供されている。通信の効率行うため、Kafkaは[[Transmission Control Protocol|TCP]]上でバイナリ形式による通信行いまた「メジセッ」と呼ばれる概念を導入し複数のメッセージをまとめて送受信することを可能にしている。これらの工夫により、Kafkaは「より大きなネットワークパケット、より大きなシーケンシャルディスク操作、連続したメモリブロック(中略)を実現し、莫大な数のランダムメッセージを線形書き込ことができる<ref>{{Cite web |url=https://kafka.apache.org/documentation/#maximizingefficiency |title=Efficiency |website=kafka.apache.org |access-date=2019-09-19}}</ref>」と主張する。


== 歴史 ==
== 歴史 ==
Kafkaは元々[[LinkedIn]]で開発され、その後2011年初めにオープンソース化された。ジェイ・クレプス、ネーハ・ナルケデ、ジュン・ラオがKafkaの共同開発に協力した<ref name="ForbesKreps">Li, S. (2020).</ref>。2012年10月23日に[[Apache Incubator]]から卒業した<ref>{{Cite web |title=Apache Incubator: Kafka Incubation Status |url=https://incubator.apache.org/projects/kafka.html |access-date=2023年2月6日}}</ref>。ジェイ・クレプスは、「書くことに最適化されたシステム」であり、カフカの作品が好きだったから、作者であ[[フランツ・カフカ]]にちなんでこのソフトウェアの名前を選んだ<ref>{{Cite web |title=What is the relation between Kafka, the writer, and Apache Kafka, the distributed messaging system? |website=[[Quora]] |url=https://www.quora.com/What-is-the-relation-between-Kafka-the-writer-and-Apache-Kafka-the-distributed-messaging-system/answer/Jay-Kreps |access-date=2017-06-12}}</ref>。
Kafkaは元々[[LinkedIn]]で開発され、その後2011年初めにオープンソース化された。ジェイ・クレプス、{{Ill|ネーハ・ナルケデ|en|Neha Narkhede}}、ジュン・ラオによって共同開発された<ref name="ForbesKreps">Li, S. (2020).</ref>。2012年10月23日に[[Apache Incubator]]から卒業した<ref>{{Cite web |title=Apache Incubator: Kafka Incubation Status |url=https://incubator.apache.org/projects/kafka.html |access-date=2023年2月6日}}</ref>。このシステムの名称は[[フランツカフカ]]に由来するが、クレプスはその理由としてKafkaが「書くことに最適化されたシステム」であり、また彼がカフカの作品が好きだったため語っている<ref>{{Cite web |title=What is the relation between Kafka, the writer, and Apache Kafka, the distributed messaging system? |website=[[Quora]] |url=https://www.quora.com/What-is-the-relation-between-Kafka-the-writer-and-Apache-Kafka-the-distributed-messaging-system/answer/Jay-Kreps |access-date=2023-02-08}}</ref>。


== アプリケーション ==
== アプリケーション ==
Apache Kafkaは[[コミット (データ管理)|コミット]]ログをベースにしており、ユーザーはそれをサブスクライブして、任意の数のシステムやリアルタイムアプリケーションにデータを公開することができる。アプリケーションの例として、[[Uber]]における乗客とドライバーのマッチング管理、ブリティッシュガスのスマートホームにおけるリアルタイム分析および予測メンテナンスの提供、LinkedIn全体における多数のリアルタイムサービスの実行などが挙げられる<ref>{{Cite web |url=https://www.confluent.io/what-is-apache-kafka/ |title=What is Apache Kafka |website=confluent.io |access-date=2018-05-04}}</ref>。
Apache Kafkaは[[コミット (データ管理)|コミット]]ログをベースにしており、ユーザーはそれをサブスクライブして、任意の数のシステムやリアルタイムアプリケーションにデータを公開することができる。Kafka採用例として、[[Uber]]における乗客とドライバーのマッチング管理、ブリティッシュガスのスマートホームサービスにおけるリアルタイム分析および予知保全の提供、LinkedIn全体における多数のリアルタイムサービスの実行などがる<ref>{{Cite web |url=https://www.confluent.io/what-is-apache-kafka/ |title=What is Apache Kafka |website=confluent.io |access-date=2018-05-04}}</ref>。


== アーキテクチャ ==
== アーキテクチャ ==
[[ファイル:Overview_of_Apache_Kafka.svg|左|サムネイル|Kafkaの概要]]
[[ファイル:Overview_of_Apache_Kafka.svg|左|サムネイル|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トランザクション書き込みが実装され、Streams APIを用いたexactly-onceなストリーム処理実現可能となった


トピックには通常のトピックとコンパクト化されたトピックの2種類ある。通常のトピックにおいては保持時間または容量上限を設定することができる。指定された保持時間よりも古いレコードが存在する場合パーティションの容量上限を超え場合ストレージ領域確保するために古いデータ削除される。コンパクト化されたトピックでは、あるキを持つメッセージが送られきた際に、同じキーを持つメッセージの更新としてのメッセージを扱う。メッセージは期限切れや容量超過などの理由により削除されることはなく、特定のキーに対しNULL値を持ついわゆるtombstone(墓標)メッセージを書くことで初めて削除される。
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値を持ついわゆるtombstone(墓標)メッセージを書くことで、メッセージを完全に削除することができる。


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


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


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


== Kafka API ==
== Kafka API ==


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


=== ストリームAPI ===
=== Streams 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である<ref>{{Cite web |title=Apache Kafka |url=https://kafka.apache.org/28/documentation/streams/upgrade-guide.html |access-date=2021-09-10 |website=Apache Kafka |language=en}}</ref>。リンク先には、最新版へのアップグレード方法も記載されている<ref>{{Cite web |title=Apache Kafka |url=https://kafka.apache.org/28/documentation/streams/upgrade-guide.html |access-date=2021-09-10 |website=Apache Kafka |language=en}}</ref>
Kafka Streams(またはStreams API)は、Javaで記述されたストリーム処理ライブラリである。Kafka 0.10.0.0リリースで追加された。このライブラリにより、拡張性、伸縮性、耐障害性に優れたステートフルなストリーム処理を行うアプリケーションを開発できる。主なAPIはストリーム処理用の[[ドメイン固有言語|DSL]]で、フィルタ、マップ、グループ化、ウィンドウ、集約、結合、テーブルの概念など一般的なストリーム操作を提供する。より詳細なストリー処理の実装めにProcessor APIも用意されており、DSLとProcessor APIを併用して処理を記述することもでる。ステートフルなストリーム処理のために、Kafka Streamsは[[RocksDB]]を使ってローカルな演算子の状態を保持する。[[RocksDB]]はディスクへの書き込みが可能なため、保持される状態は利用可能なメモリ容量よりも大きくなる可能性がある。また、耐障害性の観点から、ローカルのステートストアへの更新はすべてKafkaクラスタのトピックに書き込まれる。このため、これらのトピックを読み込むことで状態を再現し、すべてのデータをRocksDBに送り込むことができる。


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


== パフォーマンス ==
== パフォーマンス ==
63行目: 59行目:


* [[RabbitMQ]]
* [[RabbitMQ]]
* [[Apache Pulsar]]
* [[Redis]]
* [[Redis]]
* [[Apache Flink]]
* {{Ill|Apache Flink|en|Apache Flink}}
* [[Apache Samza]]
* {{Ill|Apache Samza|en|Apache Samza}}
* [[Apache Spark|Apache Spark Streaming]]
* [[Apache Spark|Apache Spark Streaming]]
* [[Data Distribution Service]]
* [[Data Distribution Service]]
* [[Enterprise Integration Patterns]]
* {{Ill|Enterprise Integration Patterns|en|Enterprise Integration Patterns}}
* [[Enterprise messaging system]]
* {{Ill|Enterprise messaging system|en|Enterprise messaging system}}
* [[ストリーム・プロセッシング|ストリーミング分析]]
* [[ストリーム・プロセッシング]]
* [[Event-driven SOA]]
* {{Ill|Event-driven SOA|en|Event-driven SOA}}
* [[Hortonworks DataFlow]]
* {{Ill|Hortonworks DataFlow|en|Hortonworks DataFlow}}
* [[メッセージ指向ミドルウェア]]
* [[メッセージ指向ミドルウェア]]
* [[サービス指向アーキテクチャ]]
* [[サービス指向アーキテクチャ]]
84行目: 79行目:
* [https://kafka.apache.org/ 公式サイト]
* [https://kafka.apache.org/ 公式サイト]


{{Apache}}
[[Category:企業アプリケーション統合]]
[[Category:企業アプリケーション統合]]
[[Category:フリーソフトウェア]]
[[Category:プンソースソフトウェア]]
[[Category:Apacheソフトウェア財団|Kafka]]
[[Category:Javaプラットフォーム]]
[[Category:Javaプラットフォーム]]
[[Category:メッセージ指向ミドルウェア]]
[[Category:メッセージ指向ミドルウェア]]

2023年2月13日 (月) 23:25時点における最新版

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 Connectと呼ばれるフレームワークを用いることにより、外部システムと接続しデータのインポート/エクスポートを行うことができるほか、ストリーム処理を行うアプリケーション向けのKafka Streamsライブラリが提供されている。通信の効率化を行うため、KafkaはTCP上でバイナリ形式による通信を行い、また「メッセージセット」と呼ばれる概念を導入し複数のメッセージをまとめて送受信することを可能にしている。これらの工夫により、Kafkaは「より大きなネットワークパケット、より大きなシーケンシャルなディスク操作、連続したメモリブロック(中略)を実現し、莫大な数のランダムなメッセージを線形に書き込むことができる[4]」と主張する。

歴史

[編集]

Kafkaは元々LinkedInで開発され、その後2011年初めにオープンソース化された。ジェイ・クレプス、ネーハ・ナルケデ英語版、ジュン・ラオによって共同で開発された[5]。2012年10月23日にApache Incubatorから卒業した[6]。このシステムの名称はフランツ・カフカに由来するが、クレプスはその理由として、Kafkaが「書くことに最適化されたシステム」であり、また彼がカフカの作品が好きだったためと語っている[7]

アプリケーション

[編集]

Apache Kafkaはコミットログをベースにしており、ユーザーはそれをサブスクライブして、任意の数のシステムやリアルタイムアプリケーションにデータを公開することができる。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でトランザクション書き込みが実装され、Streams APIを用いたexactly-onceなストリーム処理が実現可能となった。

トピックには通常のトピックとコンパクト化されたトピックの2種類がある。通常のトピックにおいては保持時間または容量上限を設定することができる。指定された保持時間よりも古いレコードが存在する場合やパーティションの容量上限を超えた場合には、ストレージ領域を確保するために古いデータが削除される。コンパクト化されたトピックでは、あるキーを持つメッセージが送られてきた際に、同じキーを持つメッセージの更新としてそのメッセージを扱う。メッセージは期限切れや容量超過などの理由により削除されることはなく、特定のキーに対しNULL値を持ついわゆるtombstone(墓標)メッセージを書くことで初めて削除される。

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

  • メッセージの公開を行うためのProducer API
  • トピックをサブスクライブし、メッセージのストリームを処理するためのConsumer API
  • 既存のアプリケーションにトピックをリンクさせることができるConnector API
  • 入力されたストリームのメッセージを変換し別のストリームとして出力するためのStreams API
  • トピック、ブローカー、およびその他のKafkaオブジェクトを管理するためのAdmin API

Consumer APIとProducer APIは、基盤となるメッセージングプロトコルによってKafkaのコア機能から切り離されている。これにより、Consumer APIとProducer APIと互換性のあるAPIをJava以外の言語でも性能を保ったまま実装することができる。Apache Kafkaプロジェクトは、このようなサードパーティ製のAPIのリストを管理している。

Kafka API

[編集]

Connector API

[編集]

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

Streams API

[編集]

Kafka Streams(またはStreams API)は、Javaで記述されたストリーム処理ライブラリである。Kafka 0.10.0.0リリースで追加された。このライブラリにより、拡張性、伸縮性、耐障害性に優れたステートフルなストリーム処理を行うアプリケーションを開発できる。主なAPIはストリーム処理用のDSLで、フィルタ、マップ、グループ化、ウィンドウ、集約、結合、テーブルの概念などの一般的なストリーム操作を提供する。より詳細なストリーム処理の実装のためにProcessor APIも用意されており、DSLとProcessor APIを併用して処理を記述することもできる。ステートフルなストリーム処理のために、Kafka StreamsはRocksDBを使ってローカルな各演算子の状態を保持する。RocksDBはディスクへの書き込みが可能なため、保持される状態は利用可能なメモリ容量よりも大きくなる可能性がある。また、耐障害性の観点から、ローカルのステートストアへの更新はすべてKafkaクラスタのトピックに書き込まれる。このため、これらのトピックを読み込むことで状態を再現し、すべてのデータをRocksDBに送り込むことができる。

バージョンの互換性

[編集]

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

パフォーマンス

[編集]

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

関連項目

[編集]

参考文献

[編集]
  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”. 2023年2月6日閲覧。
  7. ^ What is the relation between Kafka, the writer, and Apache Kafka, the distributed messaging system?”. Quora. 2023年2月8日閲覧。
  8. ^ What is Apache Kafka”. confluent.io. 2018年5月4日閲覧。
  9. ^ Monitoring Kafka performance metrics” (英語) (2016年4月6日). 2016年10月5日閲覧。
  10. ^ Mouzakitis (2016年4月6日). “Monitoring Kafka performance metrics” (英語). datadoghq.com. 2016年10月5日閲覧。
  11. ^ Collecting Kafka performance metrics - Datadog” (英語) (2016年4月6日). 2016年10月5日閲覧。

外部リンク

[編集]