Kafka はどのようにして数十万件の書き込みの高い同時実行性を実現するのでしょうか?

Kafka はどのようにして数十万件の書き込みの高い同時実行性を実現するのでしょうか?

  [[285197]]

導入

最近は人気のMQがたくさんあります。弊社では技術選定でKafkaを採用することになりましたので、Kafkaの紹介記事をまとめました。技術選択を通じて、業界で主流の MQ を比較しました。 Kakfa の最大の利点は、その高いスループットです。

Kafka は、高スループットと低レイテンシを備えた、高同時実行性と高性能を備えたメッセージ ミドルウェアです。ビッグデータの分野で広く利用されています。適切に構成された Kafka クラスターでは、1 秒あたり数十万または数百万という超高速の同時書き込みも実現できます。

では、Kafka はどのようにしてこのような高いスループットとパフォーマンスを実現するのでしょうか?作業を開始したら、Kafka のアーキテクチャ設計原則を詳しく見ていきましょう。これらの原則を習得すると、インターネット面接で有利になります。

持続性

Kafka は、メッセージを保存およびキャッシュするためにファイル システムに依存します。データが受信されるたびに、ディスクに書き込まれます。 「ディスクは遅い」という一般的な印象から、永続的なアーキテクチャが強力なパフォーマンスを提供できるかどうか疑問に思う人もいます。

実際には、ディスクの使用方法に応じて、ディスクの速度は予想よりもはるかに遅くなったり、はるかに速くなったりすることがあります。また、適切に設計されたディスク構造は、多くの場合、ネットワークと同じくらい高速になります。

上記の数値を比較すると、場合によってはシーケンシャル ディスク アクセスの方がランダム メモリ アクセスよりも実際に高速であることがわかります。実際、Kafka はこの利点を利用して、高性能なディスク書き込みを実現しています。

参照: http://kafka.apachecn.org/documentation.html#persistence

ページキャッシュ技術 + ディスクシーケンシャル書き込み

ディスク書き込みパフォーマンスを確保するために、Kafka はまずオペレーティング システムのページ キャッシュに基づいてファイル書き込みを実装します。

オペレーティング システム自体には、ページ キャッシュと呼ばれるキャッシュ レイヤーがあり、これはメモリ内のキャッシュです。これを OS キャッシュと呼ぶこともできます。これは、オペレーティング システム自体によって管理されるキャッシュを意味します。

ディスク ファイルを書き込むときは、OS キャッシュに直接書き込むことができます。つまり、メモリに書き込むだけです。次に、オペレーティング システムは、OS キャッシュ内のデータを実際にディスクにフラッシュするタイミングを決定します。

上記の方法により、ディスク ファイルの書き込みパフォーマンスが大幅に向上します。実際、この方法はディスクへの書き込みではなく、メモリへの書き込みと同じです。

ディスクへの順次書き込み

もう 1 つの非常に重要な点は、Kafka がデータを書き込むときに、ディスクの順序でディスクに書き込むことです。つまり、ファイル内のランダムな場所のデータを変更するのではなく、ファイルの末尾にのみデータを追加します (追加)。

通常の機械式ハードドライブの場合、ランダムに書き込むとパフォーマンスが非常に低くなり、ディスクのアドレス指定に問題が発生します。ただし、ファイルの末尾にデータを追加して順次書き込むだけの場合、順次ディスク書き込みのパフォーマンスは、メモリへの書き込みのパフォーマンスと基本的に同じです。

要約すると、Kafka はページ キャッシュ テクノロジー + ディスク シーケンシャル書き込みテクノロジーに基づいて、データ書き込みの超高性能を実現します。

したがって、1 秒あたり数万、あるいは数十万のデータを確実に書き込むための重要なポイントは、各データの書き込みパフォーマンスを最大化し、単位時間あたりに書き込めるデータを増やしてスループットを向上させることです。

ゼロコピー技術

書くことについて話した後は、消費について話しましょう。

ご存知のとおり、Kafka からデータを取得する必要が頻繁に生じます。消費時には、次の図に示すように、実際に Kafka のディスク ファイルからデータを読み取り、下流のコンシューマーに送信する必要があります。

Kafka がディスクからデータを読み取り、上記の方法で下流のコンシューマーに送信する場合、プロセスはおおよそ次のようになります。

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

全体のプロセスは次のとおりです。

上の図からわかるように、このプロセス全体では不要なコピーが 2 つあります。

オペレーティング システムのキャッシュからアプリケーション プロセスのキャッシュにコピーされ、その後、アプリケーション キャッシュからオペレーティング システムのソケット キャッシュにコピーされます。

これら 2 つのコピーを実行するために、途中で複数のコンテキスト スイッチが発生しました。アプリケーションが実行されている場合もあれば、実行のためにコンテキストがオペレーティング システムに切り替えられている場合もあります。

したがって、このデータ読み取り方法では、より多くのパフォーマンスが消費されます。

この問題を解決するために、Kafka はデータの読み取り時にゼロコピー技術を導入します。

つまり、オペレーティング システムのキャッシュ内のデータは、データをコピーする 2 つの手順をスキップして、ネットワーク カードに直接送信され、下流の消費者に送信されます。ソケット キャッシュには記述子のみがコピーされ、データはコピーされません。

この素晴らしいプロセスを体験してみましょう。

ゼロコピー技術により、OS キャッシュ内のデータをアプリケーション キャッシュにコピーしたり、アプリケーション キャッシュからソケット キャッシュにコピーしたりする必要がなくなります。両方のコピーが省略されるため、ゼロコピーと呼ばれます。

ソケット キャッシュはデータ記述子をコピーするだけで、その後、データは OS キャッシュからネットワーク カードに直接送信されます。このプロセスにより、データ消費中のファイル データの読み取りパフォーマンスが大幅に向上します。

また、ディスクからデータを読み取るときに、まずそのデータが OS キャッシュ メモリ内にあるかどうかがチェックされることに気づくでしょう。そうであれば、データは実際にはメモリから直接読み取られます。

Kafka クラスターが適切に調整されている場合、大量のデータが OS キャッシュに直接書き込まれ、その後 OS キャッシュから読み取られることがわかります。

これは、Kafka が完全にメモリに基づいてデータの書き込みと読み取りを提供するのと同じであり、全体的なパフォーマンスが非常に高くなります。

要約する

Kafka の優れた設計を研究することで、Kafka の基盤となるページ キャッシュ テクノロジの使用、ディスクの順次書き込みの考え方、ゼロ コピー テクノロジの適用を理解し、これらによって Kafka がこのような高いパフォーマンスを発揮し、1 秒あたり数十万のスループットを達成できることがわかります。

用語集

スループット (TPS): スループットとは、ネットワーク、デバイス、ポート、仮想回線、またはその他の施設で単位時間あたりに正常に送信されるデータの量を指します (ビット、バイト、パケットなどで測定されます)。

<<:  変化の時 Yanrong TechnologyがYRCloudFileストレージ製品をリリース

>>:  クラウド コンピューティングが 2020 年に政府の IT イノベーションを推進する理由

推薦する

CMBクラウド金融PaaS研究センター所長 陳シェイク氏:金融DevOpsの実用化について語る

[51CTO.comより引用] 2018年5月18日〜19日、51CTO主催のグローバルソフトウェア...

インフラ近代化の3つの課題を克服する

今日の組織にとって、インフラストラクチャの近代化は必須です。テクノロジーリーダーは、ビジネス価値を高...

Baidu の SEO に関する提案: ホワイトハット SEO に対するフレンドリーなサポート

以前、百度はSEOに関して「ストライキ」声明を出しましたが、短期間で撤回されました。このような声明は...

斗班は岐路に立たされている

「豆瓣は特定のグループをターゲットにせず、あらゆる嗜好を受け入れるよう努めています。背が高くても低く...

ユーザーエクスペリエンスを良くするためには、何を言うべきか

Baidu のアルゴリズムは、ユーザーの検索エクスペリエンスを継続的に向上させるために、常にアップグ...

SEO を通じてユーザーエクスペリエンスを最適化するにはどうすればよいでしょうか?

Baidu アルゴリズムの継続的な更新により、SEO はますます難しくなっています。以前は、内部リン...

業界のベテランがSEOの将来についてどう考えているか

みなさんこんにちは。私は徐子宇です。 Seowhy の検索プラットフォームは最近構築され、現在登録を...

「建旺2014」は、伝統的なメディア作品を違法に転載するウェブサイトを取り締まる

北京、6月12日(記者張鶴)記者が国家版権局から得た情報によると、国家版権局、中国サイバースペース管...

ウェブサイトのキーワードランキングの完全自動監視(Python実装)

この記事から始めて、プログラム自体の知識について書くことに多くのエネルギーを費やすつもりはありません...

選択: 企業ウェブサイトに大きな変更を加える方法

ウェブサイトのバージョンを更新することは一般的です。ウェブサイトを公開時から「変更なし」のままにして...

Amazon SageMaker が中国の AWS 寧夏および北京リージョンで利用可能になりました

[ 2020年5月12日北京] Amazon のクラウドサービスである Amazon Web Se...

オフラインや新しいメディアチャンネルの運営・プロモーション企画!

前回は、プロモーションプランを運用するためのオンラインプロモーションチャネルを中心に学習しました。今...

chicagovps - $12/年/512MB RAM/512MB スワップ/20GB HDD/500GB/6 データセンター

chicagovps から特別プロモーション付きの openvz vps が 2 つメールで送られて...