| 原作者 | リンクトイン |
|---|---|
| 開発者 | Apache ソフトウェア財団 |
| 初回リリース | 2011年1月[2] |
| 安定リリース | 3.8.0 [3]
/ 2024年7月26日 |
| リポジトリ |
|
| 書かれた | Scala、Java |
| オペレーティング·システム | クロスプラットフォーム |
| タイプ | ストリーム処理、メッセージブローカー |
| ライセンス | Apache ライセンス 2.0 |
| Webサイト | kafka.apache.org |
Apache Kafkaは、分散 イベント ストアおよびストリーム処理プラットフォームです。Apache Software Foundationによって開発されたオープンソースシステムで、 JavaとScalaで記述されています。このプロジェクトは、リアルタイム データ フィードを処理するための統合された高スループット、低レイテンシのプラットフォームを提供することを目指しています。Kafka は、Kafka Connect を介して外部システムに接続 (データのインポート/エクスポート用) でき、ストリーム処理アプリケーション用のKafka Streamsライブラリを提供します。Kafka は、効率性のために最適化されたバイナリTCPベースのプロトコルを使用し、メッセージを自然にグループ化してネットワーク ラウンドトリップのオーバーヘッドを削減する「メッセージ セット」抽象化に依存しています。これにより、「ネットワーク パケットが大きく、ディスク操作が連続的に大きくなり、メモリ ブロックが連続して [...] Kafka がランダム メッセージ書き込みのバースト ストリームを線形書き込みに変換できるようになります。」[4]
歴史
Kafka はもともとLinkedInで開発され、その後 2011 年初頭にオープンソース化されました。Jay Kreps、Neha Narkhede、Jun Rao が Kafka の共同開発に携わりました。[5] Apache Incubator からの卒業は 2012 年 10 月 23 日に行われました。[6] Jay Kreps は、このソフトウェアが「執筆に最適化されたシステム」であり、Kafka の作品が好きだったため、作家のFranz Kafka にちなんでソフトウェアに名前を付けることにしました。[7]
アプリケーション
Apache Kafkaはコミットログをベースとしており、ユーザーはコミットログを購読して、任意の数のシステムやリアルタイムアプリケーションにデータを公開することができます。アプリケーションの例としては、Uberでの乗客とドライバーのマッチングの管理、 British Gasのスマートホームへのリアルタイム分析と予測メンテナンスの提供、LinkedIn全体での多数のリアルタイムサービスの実行などがあります。[8]
建築

Kafka は、プロデューサーと呼ばれる任意の数のプロセスから送信されるキーと値のメッセージを保存します。データは、異なる「トピック」内の異なる「パーティション」に分割できます。パーティション内では、メッセージはオフセット (パーティション内のメッセージの位置) によって厳密に順序付けられ、タイムスタンプとともにインデックスが付けられて保存されます。「コンシューマー」と呼ばれる他のプロセスは、パーティションからメッセージを読み取ることができます。ストリーム処理の場合、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 を使用して 1 回限りのストリーム処理を提供します。
Kafka は、通常トピックと圧縮トピックの 2 種類のトピックをサポートしています。通常トピックは、保持期間またはスペースの制限付きで構成できます。指定された保持期間よりも古いレコードがある場合、またはパーティションのスペースの制限を超えた場合、Kafka は古いデータを削除してストレージ スペースを解放できます。デフォルトでは、トピックは 7 日間の保持期間で構成されていますが、データを無期限に保存することもできます。圧縮トピックの場合、レコードは時間またはスペースの制限に基づいて期限切れになることはありません。代わりに、Kafka は後続のメッセージを同じキーを持つ以前のメッセージの更新として扱い、キーごとに最新のメッセージを削除しないことを保証します。ユーザーは、特定のキーに対して null 値を持ついわゆる tombstone メッセージを書き込むことで、メッセージを完全に削除できます。
Kafka には 5 つの主要な API があります。
- プロデューサー API – アプリケーションがレコードのストリームを公開できるようにします。
- コンシューマー API – アプリケーションがトピックをサブスクライブし、レコードのストリームを処理できるようにします。
- Connect API – トピックを既存のアプリケーションにリンクできる再利用可能なプロデューサー API とコンシューマー API を実行します。
- ストリーム API – この API は入力ストリームを出力に変換し、結果を生成します。
- 管理 API – Kafka トピック、ブローカー、およびその他の Kafka オブジェクトを管理するために使用されます。
コンシューマー API とプロデューサー API は、基盤となるメッセージングプロトコルを介して Kafka のコア機能から分離されています。これにより、Kafka にバンドルされている Java API と同じくらい効率的な互換性のある API レイヤーを任意のプログラミング言語で記述できます。Apache Kafka プロジェクトでは、このようなサードパーティ API のリストを管理しています。
カフカAPI
APIを接続
Kafka Connect (または Connect API) は、他のシステムからデータをインポート/エクスポートするためのフレームワークです。これは Kafka 0.9.0.0 リリースで追加され、内部で Producer API と Consumer API を使用します。Connect フレームワーク自体は、他のシステムからデータを読み書きするための実際のロジックを実装する、いわゆる「コネクタ」を実行します。Connect API は、カスタム コネクタを構築するために実装する必要があるプログラミング インターフェイスを定義します。一般的なデータ システム用のオープン ソース コネクタや商用コネクタは、すでに多数提供されています。ただし、Apache Kafka 自体には、本番環境に対応したコネクタは含まれていません。
ストリーム API
Kafka Streams (または Streams API) は、Java で記述されたストリーム処理ライブラリです。これは、Kafka 0.10.0.0 リリースで追加されました。このライブラリを使用すると、スケーラブルで、伸縮性があり、完全なフォールト トレラントを備えたステートフル ストリーム処理アプリケーションを開発できます。メイン API は、フィルター、マップ、グループ化、ウィンドウ処理、集計、結合、テーブルの概念などの高レベル演算子を提供するストリーム処理ドメイン固有言語(DSL) です。さらに、プロセッサ API を使用して、より低レベルの開発アプローチのためのカスタム演算子を実装できます。DSL とプロセッサ 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のパフォーマンスを追跡するための監視プラットフォームがいくつかあります。これらのプラットフォームに加えて、 JConsoleなど、Javaに一般的にバンドルされているツールを使用してKafkaデータを収集することもできます。[13]
参照
- ラビットMQ
- アパッチパルサー
- レディス
- NATS
- アパッチフリンク
- アパッチ・サムザ
- Apache Spark ストリーミング
- データ配信サービス
- エンタープライズ統合パターン
- エンタープライズ メッセージング システム
- ストリーミング分析
- イベント駆動型SOA
- ホートンワークス データフロー
- メッセージ指向ミドルウェア
- サービス指向アーキテクチャ
参考文献
- ^ “Apache Kafka at GitHub”. github.com . 2023年1月16日時点のオリジナルよりアーカイブ。2018年3月5日閲覧。
- ^ 「LinkedIn の分散メッセージキュー Kafka をオープンソース化」。2022 年 12 月 26 日時点のオリジナルよりアーカイブ。2016年10 月 27 日閲覧。
- ^ 「リリース 3.8.0」。2024年7月26日。 2024年8月20日閲覧。
- ^ 「効率」。kafka.apache.org 。 2019年9月19日閲覧。
- ^ Li, S. (2020). 彼はLinkedInでの高給取りの仕事を辞め、聞いたことのないニッチな分野で45億ドルのビジネスを築きました。Forbes。2021年6月8日閲覧。Forbes_Krepsから。2023年1月31日にWayback Machineにアーカイブ。
- ^ 「Apache Incubator: Kafka Incubation Status」。2022年10月17日時点のオリジナルよりアーカイブ。2022年10月17日閲覧。
- ^ ナルケデ、ネハ、シャピラ、グウェン、パリノ、トッド (2017)。「第 1 章」。カフカ: 決定版ガイド。オライリー。ISBN 9781491936115よく、
Kafka の名前の由来や、アプリケーション自体と何か関係があるのかどうか尋ねられます。Jay Kreps 氏は、次のような見解を示しました。「Kafka は執筆用に最適化されたシステムなので、作家の名前がふさわしいと思いました。大学では文学の授業をたくさん受けていて、フランツ・カフカが好きでした。」
- ^ 「Apache Kafka とは」。confluent.io。2020年 8 月 17 日時点のオリジナルよりアーカイブ。2018 年 5 月 4 日閲覧。
- ^ “Apache Kafka”. Apache Kafka . 2021年9月10日時点のオリジナルよりアーカイブ。2021年9月10日閲覧。
- ^ 「Apache Kafka」。Apache Kafka 。2021年9月10日閲覧。
- ^ 「Kafka パフォーマンス メトリックの監視」 2016 年 4 月 6 日。2020 年 11 月 8 日時点のオリジナルよりアーカイブ。2016年 10 月 5 日に取得。
- ^ Mouzakitis, Evan (2016-04-06). 「Kafka パフォーマンス メトリックの監視」。Datadog。2020年11 月 8 日時点のオリジナルよりアーカイブ。2016年 10 月 5 日閲覧。
- ^ 「Kafka パフォーマンス メトリックの収集 - Datadog」 2016 年 4 月 6 日。2020 年 11 月 27 日時点のオリジナルよりアーカイブ。2016年 10 月 5 日に取得。
外部リンク
- 公式サイト
