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 ファイルを構築するにはどうすればいいですか?
[51CTO.com からのオリジナル記事] Sangfor といえば、情報セキュリティ分野のスター...
Kubernetes のアーキテクチャは大規模な組織には適していますが、中小規模の組織にとっては複雑...
6月から今まで、多くのウェブマスターがBaiduの大規模なk-site削除について語ってきました。B...
公式サイト: https://bwh89.net 2004年に設立されたカナダの会社で、ハイエンドで...
alpharacks.com は、仮想ホストの再販業者プロモーションを開始しました。プロモーションに...
ウェブサイトを包括的かつ深く分析し、計画を立てることは、すべてのSEO担当者が備えていなければならな...
TragicServers は非常に小規模で、個人経営の企業ですが、同社の VPS は非常に評判が良...
コミュニティネットワークの発展により、ローカルポータルの運営はピークに達しました。ローカルポータルプ...
[[420231]] Java 仮想マシン仕様によれば、プログラム カウンタに加えて、仮想マシン メ...
インターネットやビッグデータなどの技術の発展により、家具業界は活況を呈しています。ますます多くの消費...
SEO とは、オリジナルコンテンツと外部リンクに過ぎません。これは何度も言われてきたので、SEO は...
感染症流行が2年目に入る中、医療業界全体が混乱から再生へと移行したと言える。医療需要は大幅に増加して...
Hosteons は、今後、Hosteons の KVM シリーズ VPS (VPS3 ~ VPS7...
小紅書の公式報告によると、2019年5月時点で、小紅書の登録ユーザー数は2億5000万人を突破した。...
Dogyunは、香港の中国復帰25周年を記念して、香港CLDデータセンター専用サーバーを特別価格でリ...