Kafka の特徴は: 1. パブリッシュとサブスクリプションの両方で高いスループットを提供する; 2. 永続化操作を実行し、メッセージをディスクに永続化できるため、バッチ消費に使用できる; 3. 分散システム、簡単外側に拡張する; 4. オンラインおよびオフラインのシナリオをサポートします。
Kafka の特性と使用シナリオ
Kafka は、分散型パブリッシュ/サブスクライブ メッセージング システムです。これは元々 LinkedIn Corporation によって開発され、後に Apache プロジェクトの一部になりました。 Kafka は、分散型、パーティション化可能な、冗長性のある永続的なログ サービスです。
主にアクティブなストリーミング データを処理するために使用されます。ビッグデータシステムでは、ビッグデータ全体がさまざまなサブシステムで構成されており、各サブシステム内でデータが高性能かつ低遅延で継続的に循環する必要があるという問題がよく発生します。
従来のエンタープライズ メッセージング システムは、大規模なデータ処理にはあまり適していません。オンラインアプリケーション(メッセージ)とオフラインアプリケーション(データファイル、ログ)を同時に扱うために、Kafkaが登場しました。 Kafka は 2 つの役割を果たすことができます:
システム ネットワーキングの複雑さを軽減します。
プログラミングの複雑さを軽減します。各サブシステムは相互にインターフェイスをネゴシエートしなくなりました。各サブシステムはソケットのようにソケットに接続されます。Kafka は高速データ バスの役割を引き受けます
Kafka の主な機能:
パブリッシュとサブスクリプションの両方で高いスループットを提供します。 Kafka は 1 秒あたり約 250,000 メッセージ (50 MB) を生成し、1 秒あたり 550,000 メッセージ (110 MB) を処理できることがわかります。
永続化操作を実行できます。メッセージをディスクに永続化して、ETL などのバッチ消費やリアルタイム アプリケーションに使用できるようにします。データをハードディスクに保存してレプリケーションすることで、データ損失を防ぎます。
分散システム、外部への拡張が容易。すべての生産者、仲介者、消費者が複数を持ち、それらはすべて分散されます。マシンはダウンタイムなしで拡張できます。
メッセージ処理のステータスは、サーバー側ではなくコンシューマ側で維持されます。障害発生時に自動的にバランスを調整します。
オンラインとオフラインのシナリオをサポートします。
Kafka の設計ポイント:
1. Linux ファイル システムのキャッシュを直接使用して、データを効率的にキャッシュします。
2. Linux Zero-Copy を使用して、送信パフォーマンスを向上させます。従来のデータ送信では 4 回のコンテキストスイッチが必要でしたが、sendfile システムコールを使用するとカーネル状態で直接データ交換が行われるため、システムコンテキストスイッチが 2 回に削減されます。テスト結果によると、データ送信パフォーマンスが 60% 向上する可能性があります。
3. ディスク上のデータ アクセスのコストは O(1) です。 Kafka はメッセージ管理にトピックを使用します。各トピックには複数の部分 (エディション) が含まれます。各部分は論理ログに対応し、複数のセグメントで構成されます。複数のメッセージが各セグメントに保存されます (下図を参照)。メッセージ ID は論理的な場所によって決定されます。つまり、メッセージ ID はメッセージの保存場所に直接配置され、ID から場所への追加のマッピングを回避できます。各部分はメモリ内のインデックスに対応し、各セグメントの最初のメッセージのオフセットが記録されます。パブリッシャーによって特定のトピックに送信されたメッセージは、複数のパートに均等に分散されます (ランダムに、またはユーザーが指定したコールバック関数に従って分散されます)。ブローカーはパブリッシュされたメッセージを受信し、対応するパートの最後のセグメントにメッセージを追加します。セグメント上のメッセージの数が構成された値に達するか、メッセージの公開時間がしきい値を超えると、セグメント上のメッセージはディスクにフラッシュされます。ディスクにフラッシュされたメッセージ サブスクライバのみがセグメントをサブスクライブできます。セグメントの後で特定のサイズに達すると、そのセグメントは使用できなくなり、データが再びセグメントに書き込まれ、ブローカーによって新しいセグメントが作成されます。
4. 明示的な配布、つまり、複数のプロデューサー、ブローカー、コンシューマーが存在し、それらはすべて分散されます。プロデューサーとブローカーの間には負荷分散メカニズムはありません。 Zookeeper は、ブローカーとコンシューマー間の負荷分散に使用されます。
すべてのブローカーとコンシューマは Zookeeper に登録され、Zookeeper はメタデータ情報の一部を保存します。ブローカーまたはコンシューマーが変更されると、他のすべてのブローカーおよびコンシューマーに通知されます。
以上がカフカの特徴は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。