Kafka はどのようにして 1 秒あたり数百万件という超高速同時書き込みを実現するのでしょうか?

Kafka はどのようにして 1 秒あたり数百万件という超高速同時書き込みを実現するのでしょうか?

この記事では、インターネット企業での面接で頻繁に技術テストのポイントにもなる 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 が最適化を行わず、単にディスクからデータを読み取って下流のコンシューマーに送信すると仮定すると、プロセスは次のようになります。

  • まず、読み取るデータが OS キャッシュにあるかどうかを確認します。そうでない場合は、ディスク ファイルからデータを読み取り、OS キャッシュに格納します。
  • 次に、オペレーティング システムの OS キャッシュからアプリケーション プロセスのキャッシュにデータをコピーし、アプリケーション プロセスのキャッシュからオペレーティング システム レベルのソケット キャッシュにデータをコピーします。
  • *** ソケット キャッシュからデータを抽出し、ネットワーク カードに送信し、*** 下流の消費に送信します。

全体のプロセスを下の図に示します。

上の写真を見ると、不要なコピーが 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 のテクノロジー スイートでデジタル変革をリード

>>:  サーバー仮想化技術に関する深い知識

推薦する

入札と SEO は、病院の Web サイトの収益性の出発点でも終点でもすべてでもありません。

インターネットが人々の生活にますます溶け込むにつれて、あらゆる業界が知らず知らずのうちにインターネッ...

SEO担当者の今後の方向性について語る

多くの人から、SEO とは何なのか、SEO はどのように行うのか、どのようなチャネルを通じて行うのか...

H1 タグを非表示にすると SEO に影響がありますか?

HTML コードに詳しい人なら H1 タグはご存知だと思います。H1 タグを非表示にすることが Ba...

シュガーホスト - 10月の30%オフプロモーション

ホスティング会社 sugarhost は 10 月のプロモーションを開始し、通常の仮想ホスティングと...

ウェブサイトのユーザー エクスペリエンス分析: ユーザーの視点から見たフォーム ジャーニー

ユーザーがリリースフォームを使用するとき、それは旅のようなものです。旅行の目的は達成できたか?プロセ...

#ブラックウィーク 5# TragicServers - $2.99/kvm/1g メモリ/20g ハードディスク/1T トラフィック

TragicServers のブラック フライデー プロモーションが始まりました。Solusvm パ...

spinservers: 米国サーバー (超高構成 + 無制限トラフィック)、月額 199 ドル、2*e5-2683v4 (36 コア/72 スレッド)/512GDDR4/4*1.6TSSD/10Gbps 帯域幅

spinservers は、特別価格の無制限トラフィックの米国独立サーバー 2 台をリリースしました...

firstbyte: 10 元 VPS、200Mbps 無制限トラフィック、ロシア + フィンランド + ニューヨーク

firstbyte は、MediaServicePlus LLC の傘下企業です (AS が 5 つ...

ハイブリッドクラウドの時代において、Unicloudは企業にとって「クラウド」の管理を容易にします

[51CTO.com からのオリジナル記事] クラウド コンピューティングがますます多くの業界で導入...

基礎から応用まで、人工知能の饗宴について語りましょう

[51CTO.comからのオリジナル記事] IT業界の編集者として、私は当然あらゆるスマート製品に興...

リンクや製品の推奨を行うときは、関連性だけでなく需要にも重点を置く必要があります。

内部リンクであろうと外部リンクであろうと、リンクを作成するときに最初に考慮する必要があるのはリンクの...

期限切れのSEO最適化手法は廃止すべき

検索エンジンのアルゴリズムは絶えず更新されています。実際、検索エンジンのアルゴリズムが一日中更新され...

SEO検索エンジン最適化:石に触れて幸せになる

2007 年 7 月 15 日は、Dianshi Interactive の創立 1 周年にあたりま...

なぜ企業はインターネットマーケティングの適切な担当者を見つけられないのでしょうか?

月収10万元の起業の夢を実現するミニプログラム起業支援プランモバイル インターネットの発展により、企...