Kafka のスループットは一般的なメッセージキューよりも高く、最速であることはよく知られています。これはどうやって実現するのでしょうか?その理由を以下の側面から分析してみましょう。 プロデューサー(データを書き込む)プロデューサーは、Kafka にデータを送信する責任があります。まずはこの部分を分析してみましょう。 シーケンシャル書き込みハードディスクは機械的な構造であるため、読み取りと書き込みのたびにアドレス指定→書き込みのプロセスが発生しますが、その中でもアドレス指定は「機械的な動作」であり、最も時間がかかります。したがって、ハードドライブはランダム I/O を最も嫌い、シーケンシャル I/O を最も好みます。ハードディスクの読み取りと書き込みの速度を上げるために、Kafka はシーケンシャル I/O を使用します。
メモリマップファイルハードディスクにデータを順次書き込んでも、ハードディスクのアクセス速度がメモリに追いつきません。そのため、 Kafka のデータはリアルタイムでハードディスクに書き込まれるわけではありません。最新のオペレーティング システムのページング ストレージを最大限に活用してメモリを活用し、I/O 効率を向上させます。 mmap を通じて、プロセスはハードディスクの読み書きと同じようにメモリ (もちろん仮想マシンのメモリ) を読み書きします。メモリのサイズは仮想メモリがカバーしてくれるので心配する必要はありません。 コンシューマー(データ読み取り) Kafka はディスク ファイルを使用しており、高速化を望んでいますか?これはカフカを見た後の最初の疑問でした。 ZeroMQ にはサーバー ノードがなく、ハード ディスクも使用しません。論理的には、Kafka よりも高速になるはずです。しかし、実際のテストでは、その速度は依然として Kafka に負けています。 「ハードディスクを使う方がメモリを使うよりも速い」というのは全く常識に反します。これが起こった場合、それは不正行為であることを意味します。 Web サーバーの静的ファイルの速度を向上させるにはどうすればよいでしょうか?静的ファイルを配信する Web サーバーを最適化する方法について、よく考えてみましょう。答えはゼロコピーです。従来のモードでは、ハードディスクからファイルを次のように読み取ります。
Java の NIO は FileChannle を提供します。その transferTo メソッドと transferFrom メソッドは Zero Copy です。 Kafka はどのように不正行為をするのでしょうか?それについて考えたことはありますか? Kafka はすべてのメッセージを 1 つずつファイルに保存し、コンシューマーがデータを必要とするときに、Kafka は「ファイル」を直接コンシューマーに送信します。これが秘密です。たとえば、100,000 件のメッセージが 10 MB のデータに結合されます。その後、Kafka はファイルを送信するのと同様の方法でそれを直接送信します。消費者と生産者の間のネットワークが非常に良好であれば(ネットワークが少し正常であれば、10MB はまったく問題ではありません...自宅のインターネット帯域幅は 100Mbps です)、 10MB は 1 秒しかかからない場合があります。答えは 10W TPS です。Kafka は 1 秒あたり 10W のメッセージを処理します。 出力としてのout_fd(通常はソケットハンドル) in_fdは入力ファイルハンドルです off_t は in_fd のオフセット(読み取りを開始する場所)を表します。 size_tは読み取る数を示します それは正しい。 Kafka はファイルの読み取りおよび書き込み方法として mmap を使用します。これはファイルハンドルなので、sendfile に渡すだけです。オフセットも簡単に解決できます。ユーザーはオフセットを自分で保持し、リクエストごとにオフセットを送信します。 (覚えていますか? Zookeeper に入れてください);データ量が多いほど解決しやすくなり、消費者がもっと早く欲しい場合は、すべてを消費者に渡すだけで済みます。これをやると、消費者は大抵圧死することになる。したがって、Kafka は 2 つのメソッドを提供します。Push は、すべてをあなたに投げるので、あなたが死んでも私には関係ありません。引っ張って、いいですよ、何本必要か言ってください、その分だけ差し上げます。 要約するKafka の高速性の秘密は、すべてのメッセージを 1 つのファイルに変換することです。 mmap を使用することで I/O 速度が向上します。データを書き込む際、最後に追加されるため速度が最適になります。データを読み込む際、sendfile で強制的に直接出力します。 Alibaba の RocketMQ もこのモデルを使用していますが、Java で記述されています。 MQ の速度を単にテストするだけでは意味がありません。 Kafka の「暴力的」、「無法」、「恥知らず」なアプローチは MQ の本質を奪い、MQ を暴力的な「データ送信機」のようなものに変えてしまいました。したがって、MQ の評価は速度のみに基づいて行われます。世界中にカフカを超える人はいない。設計する際には、インターネット上の噂を信じてはいけません。「Kafka は最速で、誰もが使っているので、MQ には Kafka を使うのが正解だ」このような考え方では、「敗者」のことをまったく気にしないかもしれません。実際、これらの「敗者」は、あなたのビジネスにより適した MQ である可能性があります。 |
<<: QingCloudはクラウド、ネットワーク、エッジ、ターミナルを統合したフルディメンションクラウドプラットフォームを構築します
>>: Docker Compose ファイルを構築するにはどうすればいいですか?
SEO では毎日進歩する必要があります。1 日も進歩が見られない場合は、自分自身を振り返る必要があり...
Shanpai.comのコンセプトは人気のSwoopoからインスピレーションを得ていますShanpa...
マイクロサービスと分散システムの違いは何ですか?それぞれの特徴は何ですか?マイクロサービスは、既存の...
ここが実践の場です。アクションリクエストボタンは、Web トラフィックを商業価値に変換する役割を果た...
テンセントテクノロジーニュース(潮汇)北京時間10月13日、海外メディアの報道によると、マイクロソフ...
記者らは本日、Heiji.com(旧ハッカー基地)の代表である王先兵氏と講師の周林良氏が、コンピュー...
米国のテクノロジー投資家は先週、ようやく安堵のため息をついた。ナスダックは、2001年のインターネッ...
今日では、アプリケーションの増加によりデータ量が増加し続けており、企業はより迅速に対応し、行動する必...
ソフトウェア製品の作成に携わる人なら誰でも、開発ライフサイクルを短縮し、継続的な配信と高品質の製品を...
今年は知乎の設立10周年にあたり、このタイミングで知乎は米国で株式を公開しました。今年3月25日、知...
先日終了した2022 OpenCloudOSコミュニティオープンデーで、国産オープンソースオペレーテ...
[51CTO.com からのオリジナル記事] 今日、オープンソースとクラウド コンピューティングとい...
extravm は 2009 年にダラスで設立され、仮想ホスティング、VPS (通常の VPS、ゲー...
「百科事典は難しい、天国に登るのと同じくらい難しい」!これは、百度百科事典(Soso百科事典などの他...
ドキュメンタリー、レコード、文学書、漫画、テクノロジー製品のファンは、クラウドファンディングのウェブ...