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 が分散コンピューティングの本質を説明します (ビデオを含む)
フォーラムの運営についてはウェブマスターによって理解が異なる場合がありますが、まとめると、現在フォー...
spinservers(1994年に設立された米国MET International傘下のサーバーブ...
vkusno は、2010 年から運営されているエストニアのホスティング会社です。ホスティング事業は...
世界のアプリ経済は急成長期にあります。App Annie によると、アプリストアでの消費者支出は 2...
7月、imidc Rainbow Network(Rainbow Cloud)は香港、台湾、日本のデ...
私の友人の多くは、テンセントの QQ ニュース チャンネルをよく知っていると思います。毎日 QQ に...
新しい Web サイトを構築する初期段階では、多くの Web 管理者にとって最大の懸念は、Web サ...
Google アナリティクスのカスタム変数は、技術的な知識があまりない Web マーケティング担当者...
「クラウド コンピューティング」という概念は 2006 年に初めて提案されて以来、もはや奇妙な概念で...
クラウドサービスは、新世代の商用インフラとして、インターネットがToB時代後半に突入するための最も重...
生成型人工知能 (AI) は、企業に数兆ドルの価値をもたらし、私たちの働き方を根本的に変える可能性を...
多くの友人はWordPressなどのウェブサイト構築ツールを好んで使用しており、その人気度は非常に高...
公式の spartanhost システムには Windows 2008 が含まれており、オプションで...
dwidc(Dwidc Data)、現在の期間限定プロモーションはちょっとクレイジーです。湖北エンタ...
最も安い韓国のVPS、安い韓国のVPSをお勧めします!韓国で最も安い VPS はどれですか?最も安い...