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 ファイルを構築するにはどうすればいいですか?
SDX は Software Defined X の略で、ソフトウェア定義パラダイムを意味し、ソフト...
Luobo Dataは、ダブル12プロモーションを先行して開始しました。voxilityが提供する無...
諺にあるように、仕事をうまくやり遂げたいなら、まず道具を磨かなければなりません。この記事は、情報フロ...
arkecxはどうですか? Zenlayer直系のクラウドサーバーブランドとして、期待が高まっている...
現在までに、私のウェブサイトはほぼ 5 か月間オンラインになっています。SEO に関わり始めた当初は...
Bluehost はおそらく、世界で最も人気があり (ユーザー数が多い)、よく知られている Web ...
一昨日、インターネットで「自社のウェブサイトを最適化するにはどうすればいいですか?ホームページだけを...
私が初めて SEO 業界に接したとき、最もよく耳にした概念は、「外部リンクが王様であり、コンテンツが...
Amazon Web Services とドイツ・ブンデスリーガは、Amazon Web Servi...
ウクライナのホスティング会社である Takewyn は、ウクライナの仮想ホスティング、ウクライナの ...
2013年の初め、2つのオンライン短期レンタルサイト、Ant Short-term RentalとX...
昨日(6月30日)、AppleのiTunes Connectバックエンドはニュース発表を行い、「モバ...
企業のデジタル変革が加速するにつれ、デジタルベースのビジネスアプリケーションシナリオはますます複雑に...
2012年現在、オーディオ小説は再び活発な発展の時代を迎えています。現在、百度インデックスは1日あた...
昨年、Michael I. Jordan 研究室は「CoCoA: 通信効率の高い分散最適化のための一...