この記事では、インターネット企業での面接で頻繁に技術テストのポイントにもなる Kafka のアーキテクチャ設計原則について説明します。 Kafka は、高スループットと低レイテンシを備えた、高同時実行性と高性能を備えたメッセージ ミドルウェアです。ビッグデータ分野で広く利用されています。適切に構成された Kafka クラスターでは、1 秒あたり数十万または数百万という超高速の同時書き込みも実現できます。 では、Kafka はどのようにしてこのような高いスループットとパフォーマンスを実現するのでしょうか?この記事ではそれについて詳しく説明します。 ページキャッシュ技術 + ディスクシーケンシャル書き込み まず、Kafka はデータを受信するたびに、次の図に示すようにそれをディスクに書き込みます。 そこで、疑問が湧いてきます。データがディスクベースで保存され、データがディスク ファイルに頻繁に書き込まれると、パフォーマンスが非常に低下するのでしょうか?ディスクの書き込みパフォーマンスが非常に悪いと誰もが思うはずです。 はい、本当に上の図のように単純なものであれば、パフォーマンスは確かに悪いです。 しかし実際には、Kafka にはデータ書き込みパフォーマンスを確保するための非常に優れた設計があります。まず、Kafka はオペレーティング システムのページ キャッシュに基づいてファイルの書き込みを実装します。 オペレーティング システム自体には、メモリ内のキャッシュであるページ キャッシュと呼ばれるキャッシュ レイヤーがあります。これを OS キャッシュと呼ぶこともできます。これは、オペレーティング システム自体によって管理されるキャッシュを意味します。 ディスク ファイルに書き込む場合、OS キャッシュに直接書き込むことができます。つまり、メモリに書き込むだけです。次に、オペレーティング システムは、OS キャッシュ内のデータを実際にディスク ファイルにフラッシュするタイミングを決定します。 この 1 つのステップだけで、実際にはディスクではなくメモリに書き込まれるため、ディスク ファイルの書き込みパフォーマンスが大幅に向上します。次の図を参照してください。 もう 1 つの重要な点は、Kafka がデータを書き込むときに、ディスクの順序で書き込むことです。 つまり、データはファイル内のランダムな場所で変更されるのではなく、ファイルの末尾にのみ追加されます。 通常の機械式ディスクは、ランダムに書き込む場合、つまり、データを書き込むためにファイル内の特定の場所を見つける必要がある場合、パフォーマンスが非常に低くなります。 ただし、ファイルの末尾に追加してデータを順次書き込む場合、順次ディスク書き込みのパフォーマンスは、メモリへの書き込みのパフォーマンスと基本的に同じになります。 上の図では、Kafka がデータを書き込むときに、OS レベルのページ キャッシュに基づいてデータを書き込むため、パフォーマンスが非常に高いことが誰もが知っています。本質的には、メモリに書き込むだけです。 また、ディスクシーケンシャル書き込みを使用しているため、データをディスクにフラッシュした場合でもパフォーマンスが非常に高く、メモリへの書き込みとほぼ同じです。 上記 2 つの点に基づき、Kafka はデータの書き込みにおいて非常に高いパフォーマンスを実現します。考えてみてください。Kafka が 1 個のデータを書き込むのに 1 ミリ秒かかるとしたら、1 秒あたり 1,000 個のデータを書き込むことはできるでしょうか? しかし、Kafka のパフォーマンスが非常に高く、データの書き込みに 0.01 ミリ秒しかかからない場合はどうなるでしょうか?では、1秒間に10万個のデータを書き込むことは可能でしょうか? したがって、1 秒あたり数万、数十万のデータを確実に書き込むには、各データの書き込みパフォーマンスを可能な限り向上させ、単位時間あたりに書き込めるデータ量を増やしてスループットを向上させることがポイントになります。 ゼロコピー技術 書くことについて話した後は、消費について話しましょう。 ご存知のとおり、Kafka からデータを取得する必要が頻繁に生じます。消費時には、次の図に示すように、実際に Kafka のディスク ファイルからデータの一部を読み取り、下流のコンシューマーに送信する必要があります。 では、データがディスクから頻繁に読み取られ、消費者に送信される場合は、パフォーマンスのボトルネックはどこにあるのでしょうか? Kafka が最適化を行わず、単にディスクからデータを読み取って下流のコンシューマーに送信すると仮定すると、プロセスは次のようになります。
全体のプロセスを下の図に示します。 上の写真を見ると、不要なコピーが 2 つあることがわかります。 1 つはオペレーティング システムのキャッシュからアプリケーション プロセスのキャッシュにコピーされ、次にアプリケーション キャッシュからオペレーティング システムのソケット キャッシュにコピーされます。 これら 2 つのコピーを実行するために、途中で複数のコンテキスト スイッチが発生しました。アプリケーションが実行されている場合もあれば、実行のためにコンテキストがオペレーティング システムに切り替えられている場合もあります。 したがって、このデータ読み取り方法では、より多くのパフォーマンスが消費されます。この問題を解決するために、Kafka はデータの読み取り時にゼロコピー技術を導入します。 つまり、オペレーティング システムのキャッシュ内のデータは、データをコピーする 2 つの手順をスキップして、ネットワーク カードに直接送信され、下流の消費者に送信されます。ソケット キャッシュには記述子のみがコピーされ、データはコピーされません。 この素晴らしいプロセスを体験するには、下の写真をご覧ください。 ゼロコピー テクノロジーを使用すると、OS キャッシュ内のデータをアプリケーション キャッシュにコピーしたり、アプリケーション キャッシュからソケット キャッシュにコピーしたりする必要がありません。両方のコピーが省略されるため、ゼロコピーと呼ばれます。 ソケット キャッシュはデータ記述子をコピーするだけで、その後、データは OS キャッシュからネットワーク カードに直接送信されます。このプロセスにより、データ消費中のファイル データの読み取りパフォーマンスが大幅に向上します。 また、ディスクからデータを読み取るときに、まずそのデータが OS キャッシュ メモリ内にあるかどうかがチェックされることに気づくでしょう。そうであれば、データは実際にはメモリから直接読み取られます。 Kafka クラスターが適切に調整されている場合、大量のデータが OS キャッシュに直接書き込まれ、その後、そのデータが OS キャッシュから読み取られることがわかります。 これは、Kafka が完全にメモリに基づいてデータの書き込みと読み取りを提供するのと同じであり、全体的なパフォーマンスが非常に高くなります。 余談ですが、次回機会があれば Elasticsearch のアーキテクチャ原則についてお話ししたいと思います。実際、基盤となる ES は、Kafka の原理に似た OS キャッシュに基づく大量データの高性能な取得も実装しています。 要約する この記事で紹介した Kafka の基盤となるページ キャッシュ テクノロジ、ディスク シーケンシャル書き込みの考え方、ゼロ コピー テクノロジの応用を通じて、各 Kafka マシンが最下層でデータの書き込みと読み取りを行う際にどのような考え方を採用しているか、また、そのパフォーマンスが非常に高く、1 秒あたり数十万のスループットを達成できる理由を、誰もが理解できるはずです。 この設計アイデアは、ミドルウェア アーキテクチャを独自に設計したり、面接に出かけたりするときに非常に役立ちます。 Chinese Huperzine: 10 年以上の BAT アーキテクチャ経験、一流インターネット企業のテクニカル ディレクター。数百人のチームを率いて、数億のトラフィックを処理する複数の高同時実行システムを開発しました。長年の研究で蓄積してきた研究論文や経験の要約を文書にまとめましたので、皆様にご紹介したいと思います。 WeChat 公開アカウント: Shishan’s Architecture Notes (ID: shishan100)。 |
<<: メーカーが PTC と Rockwell Automation のテクノロジー スイートでデジタル変革をリード
ウォール・ストリート・ジャーナル紙が関係者の話として報じたところによると、アマゾンは独自の広告プラッ...
みなさんこんにちは。私は先週、4 つのウェブサイトを立ち上げました。これらの 4 つのウェブサイトを...
最新の報道によると、百度百科事典はすべての医療項目に専門認証を導入する。一般ユーザーは編集に参加でき...
arkecx は台湾省台北市に独自のデータセンターを持っています。最近、台湾のクラウド サーバー事業...
BizReport によると、Google は最近、AdWords の顧客に Campaign Op...
Terafire はデラウェア州に登録された有限会社で、ドメイン名登録、仮想ホスティング、KVM/o...
フォーラム運営の成否を決める重要な要素は、フォーラムの結束力と古い会員数です。これは、フォーラムがウ...
正直、bitaccel がスタートした当初は暴走するかもしれないと思いました。設立当初の価格は本当に...
フレンドリー リンクの交換は、SEO の最も重要なタスクの 1 つです。フレンドリー リンクの価値は...
Friendhosting は 2009 年から運営されており、かなり古い VPS ブランドですが、...
「企業がデジタル変革技術と持続可能な開発の両方に注力すれば、これら2つの成長エンジンによって同業他社...
Yingcai.com の経営不振に関するニュースは、皆さんも目にしたことがあると思います。Zhao...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
多くの人が、なぜチャネル運営に多額の費用をかけているのに、結局効果がないのかと疑問に思うでしょう。広...
O2Oは、オフラインからオンラインへの単純な転送ではなく、完全なサービスチェーンです。 2週間前、D...