Kafka のメッセージはディスクに保存またはキャッシュされます。一般的に、ディスク上のデータの読み書きはアドレス指定に時間がかかるためパフォーマンスが低下すると考えられていますが、実際には、Kafka の特徴の 1 つはスループットが高いことです。 通常のサーバーの場合でも、Kafka は 1 秒あたり *** の書き込み要求を簡単にサポートでき、ほとんどのメッセージ ミドルウェアを上回ります。この機能により、Kafka はログ処理などの大量データ シナリオでも広く使用されるようになります。 Kafka のベンチマーク テストについては、Apache Kafka ベンチマーク テスト (クリックすると元のテキストが表示されます)「1 秒あたり 200 万回の書き込み (安価なマシン 3 台)」を参照してください。
以下は、データの書き込みと読み取りの観点から、Kafka がなぜ高速なのかを分析したものです。 データの書き込み Kafka は受信したすべてのメッセージをハードディスクに書き込み、データが失われることはありません。書き込み速度を最適化するために、Kafka は順次書き込みと MMFile (メモリマップファイル) の 2 つのテクノロジを使用します。 シーケンシャル書き込み ディスクの読み取りと書き込みの速度は、ディスクの使用方法、つまり、順次読み取りと書き込みか、ランダム読み取りと書き込みかによって異なります。シーケンシャルな読み書きの場合、ディスクのシーケンシャルな読み書き速度はメモリの速度と同等です。 ハードディスクは機械的な構造であるため、読み取りと書き込みのたびにアドレス指定→書き込みのプロセスが発生しますが、その中でもアドレス指定は「機械的な動作」であり、最も時間がかかります。 したがって、ハードドライブはランダム I/O を最も嫌い、シーケンシャル I/O を最も好みます。ハードディスクの読み取りと書き込みの速度を上げるために、Kafka はシーケンシャル I/O を使用します。 さらに、Linux には、先読み、後書き、ディスク キャッシュなど、ディスクの読み取りと書き込みに対する多くの最適化機能があります。 これらの操作がメモリ内で実行される場合、Java オブジェクトのメモリ オーバーヘッドが非常に大きくなり、ヒープ メモリ データが増加すると Java GC 時間が非常に長くなります。 ディスク操作を使用すると、次の利点があります。
次の図は、Kafka がデータを書き込む方法を示しています。各パーティションは実際にはファイルです。メッセージを受信した後、Kafka はファイルの末尾 (破線部分) にデータを挿入します。 この方法には欠陥があり、データを削除する方法がないため、Kafka はデータを削除しません。すべてのデータが保持されます。各コンシューマーには、どのデータが読み取られたかを示すために、トピックごとにオフセットがあります。 2 人の消費者:
このオフセットはクライアント SDK によって保存され、Kafka のブローカーはその存在を完全に無視します。 通常、SDK はそれを Zookeeper に保存するので、コンシューマーに Zookeeper アドレスを提供する必要があります。 データを削除しないとハードディスクが確実にいっぱいになるため、Kakfa ではデータを削除するための 2 つの戦略を提供しています。
具体的な設定については、設定ドキュメントを参照してください。 メモリマップファイル ハードディスクにデータを順次書き込んでも、ハードディスクのアクセス速度がメモリに追いつきません。そのため、Kafka のデータはハードディスクにリアルタイムで書き込まれません。最新のオペレーティング システムのページング ストレージを最大限に活用してメモリを活用し、I/O 効率を向上させます。 メモリマップファイル(以下、mmap と呼びます)もメモリマップファイルに変換されます。 64 ビット オペレーティング システムでは、通常 20G のデータ ファイルを表すことができます。その動作原理は、オペレーティング システムのページを直接使用して、ファイルを物理メモリに直接マッピングすることです。 マッピングが完了すると、物理メモリ上の操作がハードディスク (適切な場合はオペレーティング システム) に同期されます。 mmap を通じて、プロセスはハードディスクの読み取りと書き込みと同じようにメモリ (もちろん、仮想マシンのメモリ) の読み取りと書き込みを行います。仮想メモリがメモリのサイズをカバーするので、メモリのサイズを心配する必要はありません。 このアプローチを使用すると、ユーザー空間からカーネル空間へのコピーのオーバーヘッドを排除することで、大幅な I/O の改善を実現できます。 (ファイルの Read を呼び出すと、まずデータがカーネル空間メモリに格納され、次にユーザー空間メモリにコピーされます) しかし、明らかな欠陥もあります。それは信頼性の低さです。 mmap に書き込まれたデータは、実際にはハードディスクに書き込まれません。オペレーティング システムは、プログラムがアクティブに Flush を呼び出したときにのみ、データをハード ディスクに書き込みます。 Kafka は、アクティブにフラッシュするかどうかを制御するためのパラメーター producer.type を提供します。
データの読み取り Kafka はディスクの読み取り時にどのような最適化を行いますか? Sendfile に基づくゼロコピーの実装 従来のモードでは、ファイルを転送する必要がある場合、具体的なプロセスの詳細は次のとおりです。
上記の詳細は、ネットワーク ファイル転送の従来の読み取り/書き込み方法です。このプロセスでは、ファイル データは実際に 4 つのコピー操作を受けることがわかります。 ハードディスク -> カーネルバッファ -> ユーザーバッファ -> ソケット関連バッファ -> プロトコルエンジン Sendfile システム コールは、上記の複数のコピーを減らし、ファイル転送のパフォーマンスを向上させる方法を提供します。 カーネル バージョン 2.1 では、ネットワーク経由および 2 つのローカル ファイル間のデータ転送を簡素化するために Sendfile システム コールが導入されました。 Sendfile を導入すると、データのコピーが削減されるだけでなく、コンテキストの切り替えも削減されます。
操作手順は以下のとおりです。
従来の読み取り/書き込み方式と比較して、カーネル バージョン 2.1 で導入された Sendfile では、カーネル バッファーからユーザー バッファーへのファイル コピー、そしてユーザー バッファーからソケット関連バッファーへのファイル コピーが削減されました。 カーネル バージョン 2.4 以降では、ファイル記述子の構造が変更され、Sendfile がより単純な方法で実装されたため、コピー操作がさらに 1 つ削減されました。 Apache、Nginx、Lighttpd などの Web サーバーには、Sendfile 関連の設定があります。 Sendfile を使用すると、ファイル転送のパフォーマンスが大幅に向上します。 Kafka はすべてのメッセージを 1 つずつファイルに保存します。コンシューマーがデータを必要とする場合、Kafka はファイルの読み取りおよび書き込み方法として mmap を使用してファイルをコンシューマーに直接送信し、それを Sendfile に直接渡します。 バッチ圧縮 多くの場合、システムのボトルネックとなるのは CPU やディスクではなく、ネットワーク IO です。特に、広域ネットワークを介してデータセンター間でメッセージを送信する必要があるデータ パイプラインの場合はそうです。 データ圧縮は CPU リソースを少量消費しますが、Kafka の場合はネットワーク IO をより重視する必要があります。
要約する Kafka の速度の秘密は、すべてのメッセージをファイルのバッチに変換し、適切なバッチ圧縮を実行し、ネットワーク IO 損失を削減し、mmap を通じて I/O 速度を向上させることです。 データを書き込む場合、最後に 1 つのパーティションが追加されるため、速度が最も速くなります。データを読み込む際、Sendfileで強制的に直接出力します。 |
>>: JD Cloud Director が分散コンピューティングの本質を説明します (ビデオを含む)
5月10日、小紅書は公開書簡の形でブランドパートナーの規則をアップグレードしました。ブランド パート...
主要なアプリケーションやサービスをクラウド プラットフォームでホストする企業が増えるにつれて、Inf...
感謝祭、ブラックフライデー、サイバーマンデー、その後にプロモーションを提供する企業は他にどこがありま...
ワイヤレス技術とモバイルスマートデバイスの急速な発展により、PCデバイスの代わりにモバイルデバイスを...
増大する顧客の需要を満たすために、企業はビジネスをクラウド プラットフォームに移行する必要があります...
MySQL パスワードをバックアップして記録するのも面倒な人が時々います。そんな人はいるのでしょうか...
微博が人々の生活に欠かせないものとなり、いつでもどこでも自分の考えや写真を微博にアップロードすること...
ロングテールキーワードは、ウェブサイトにトラフィックと人気をもたらすことができます。一定期間ウェブサ...
IBM Institute for Business Value のデータによると、実際には大多数の...
高品質なコンテンツ: その本質は希少性です。希少性には 2 つの要素が含まれます: 1. 数が少ない...
高品質サイトの作成に関するこれまでの 2 つの記事は、多くのウェブマスターから支持を得ています。本日...
タオバオアフィリエイトサイトについては、あまり説明する必要はないと思います。これは、プロモーションに...
伝統的な図書館が人々の慌ただしい生活からますます遠ざかるにつれ、書籍を迅速に更新し、戸別配達や受け取...
リン・ジンJAVAテクノロジーエキスパートLalamove Technology Center のコ...
私の友人の多くは、熱膨張と熱収縮という言葉を聞いたことがあると思います。一般の人にとって、熱膨張と熱...