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 ファイルを構築するにはどうすればいいですか?
武漢玉才第二小学校は1989年8月に設立されました。この学校は優秀な教員を擁し、独特の学校特色と目覚...
インターネット業界で働く人なら、「コンテンツは王様、外部リンクは女王」という言葉を聞いたことがあるは...
マルチコンピュータ ルーム展開とは、異なる IDC (インターネット データ センター) コンピュー...
prometeus は、イタリアの VPS に重点を置いた LEB で第 1 位です。その特徴は、非...
ロビンのSEOvipトレーニングで、20日間でターゲットキーワードの単一ページランキング1位を獲得し...
コアヒント: これは中国のウェブマスターのブログからの最適化記事です。多くの検索最適化の達人が語る最...
たった今、ネットユーザーがニュースを報じました: JD Cloud と Kingsoft Cloud...
現在、コストの削減、セキュリティの強化、管理の改善、パフォーマンスの向上など、Oracle の自律型...
2014 年 7 月 22 日の午後、北京国家会議センターで、待望の Xiaomi 2014 記者会...
1. 海賊版映画やテレビ番組のウェブマスターが巨額の利益を上げていた時代は終わり、トラフィックは大幅...
ウェブマスターになった以上、あなたはウェブサイトの重み、ランキング、トラフィックのために昼夜を問わず...
昨年、有名なプログラマー向けウェブサイト「CSDN」のデータベースがハッキングされ、600万件以上の...
colossuscloud は、近年新たに立ち上げられた serverpoint (1998 年に独...
翻訳者 |徐磊校正:孫淑娟クラウド コンピューティングは登場以来、さまざまな進化を遂げてきましたが、...
今日、ウェブマスターグループで、新しいウェブマスターが、ウェブサイトのロゴの後の文章にH1タグを追加...