Kafka は LinkedIn が立ち上げた高スループットの分散メッセージング システムです。簡単に言えば、パブリッシングとサブスクリプションに基づくメッセージ キューです。古いものを見直して新しいものを学び、優れたフレームワークを繰り返し学習することで、必ず何かが得られます。
画像はPexelsより アプリケーションシナリオKafka のアプリケーション シナリオは次のとおりです。
Kafka トポロジー図 (マルチコピー メカニズム)上図から、Kafka は分散されており、パーティションごとに複数のコピーが存在し、クラスター全体の管理は Zookeeper によって行われていることがわかります。 Kafka コアコンポーネント① ブローカー Kafka サーバーはメッセージの保存と転送を担当します。ブローカーは Kafka ノードを表します。ブローカーには複数のトピックを含めることができます。 ②トピック メッセージ カテゴリ。Kafka はトピックに従ってメッセージを分類します。 ③パーティション トピックのパーティション。トピックには複数のパーティションを含めることができ、トピック メッセージは各パーティションに保存されます。 トピックは複数のパーティションに分割できるため、Kafka には並列処理機能が提供されており、これが Kafka の高スループットの理由の 1 つです。 パーティションは物理的に複数のセグメント ファイルで構成され、各セグメントは同じサイズで、順番に読み書きされます (ランダム書き込みが不要なため、Kafka が比較的高速である理由の 1 つでもあります)。 各セグメント データ ファイルは、セグメント内の最小オフセットを使用し、ファイル拡張子は .log になります。オフセット付きのメッセージを検索する場合は、バイナリ検索を使用して、メッセージが配置されているセグメントをすばやく見つけます。 ④オフセット ログ内のメッセージの位置は、パーティション上のメッセージのオフセットとして理解でき、これはメッセージを表す一意のシーケンス番号でもあります。 また、マスターとスレーブ間で同期する必要がある情報でもあります。 ⑤プロデューサー プロデューサーは、Kafka ブローカーにメッセージを送信する役割を担うクライアントです。 ⑥消費者 メッセージ コンシューマー。Kafka ブローカーでメッセージを消費する役割を担います。 ⑦消費者団体 消費者グループ。各消費者はグループに属している必要があります。 (注: パーティションはグループ内の 1 つのコンシューマーのみが使用でき、コンシューマー グループは相互に影響を与えません。) ⑧飼育係 Kafka クラスターを管理し、クラスター ブローカー、トピック、パーティションなどのメタデータの保存を担当します。また、ブローカーの障害検出、パーティション リーダーの選出、負荷分散などの機能も担当します。 サービスガバナンスKafka は分散パブリッシュ/サブスクライブ システムなので、クラスター間でデータの同期と一貫性が実現されれば、Kafka はメッセージを失わないのでしょうか?システムがクラッシュしたときにリーダー選出を実行するにはどうすればよいでしょうか? ①データ同期 Kafka では、パーティションにはリーダーと複数のフォロワーが存在します。プロデューサーがパーティションにデータを書き込む場合、データはリーダーにのみ書き込まれ、その後、データは他のレプリカに複製されます。 各フォロワーは、定期的にリーダーにメッセージを受け取るコンシューマーとして理解できます。データが同期された後にのみ、Kafka はプロデューサーに ACK を返し、メッセージが保存されたことを通知します。 ②ISR Kafka では、パフォーマンスを確保するために、マスターとスレーブのデータを同期するために強力な一貫性方式を使用しません。 代わりに、同期レプリカのリストが維持されます。リーダーは、すべてのフォロワーが同期を完了するまで待つ必要はありません。 ISR 内のフォロワーがデータ同期を完了すると、プロデューサーに ACK を送信し、メッセージの同期が完了したと見なすことができます。 同時に、ISR 内のフォロワーがあまりにも遅れていることが判明した場合は、そのフォロワーは削除されます。 具体的なプロセスは以下のとおりです。 上記のアプローチでは、Kafka がメッセージを失わないことを保証することはできません。 Kafka は、メッセージが最大限失われないようにマルチコピー メカニズムを使用しますが、データがシステム ページ キャッシュに書き込まれているがまだディスクにフラッシュされていない場合、マシンが突然クラッシュしたり電源が失われたりすると、当然メッセージは失われます。 ③Kafka障害回復 Kafka は Zookeeper によって管理されるため、ここでの選択メカニズムでは Zab (Zookeeper によって使用される) が使用されます。
Kafka はなぜこんなに速いのでしょうか?① ディスクへのシーケンシャル書き込み Kafka はシーケンシャルディスク書き込みを使用するため、ランダム書き込みに比べてアドレスの検索にかかる時間が短縮されます。 (Kafkaの各パーティションでは、メッセージが順序付けられます) ②ページキャッシュ Kafka は、通常使用するバッファの代わりに、OS システム内のページ キャッシュを使用します。ページ キャッシュは、実際には馴染みのないものではなく、新しいものでもありません。 Linux でメモリを表示すると、バッファ/キャッシュが表示されることがよくあります。どちらも IO の読み取りと書き込みを高速化するために使用され、読み取りにはキャッシュが使用されます。 つまり、ディスクの内容をキャッシュに読み込むことができるため、アプリケーションはディスクを非常に高速に読み取ることができます。 バフは書き込みに使用されます。ディスク書き込みを開発する場合、通常、バッファに書き込んでからフラッシュすると、非常に高速になります。 Kafka は両方の長所を取り入れています。Kafka は Scala で書かれていますが、Java 仮想マシン上で実行されます。 それにもかかわらず、Kafka は依然として JVM の制限を回避しようとします。ストレージにページ キャッシュを使用するため、JVM の GC によって発生するデータの STW を回避できます。 一方、ページ キャッシュを使用すると、ゼロ コピーも実現できます。これについては、後ほど詳しく説明します。 ③ゼロコピー 優れた Netty であれ、他の優れた Java フレームワークであれ、基本的にはゼロ コピーによって CPU コンテキストの切り替えとディスク IO を削減します。 もちろんカフカも例外ではありません。ゼロコピーの概念についてはここでは詳しくは繰り返しませんが、この概念について簡単に紹介したいと思います。 アプリケーションがデータを要求する従来のプロセス: ここで、従来の方法では、4 つのコピー、2 つの DMA、2 つの CPU が使用され、CPU が 4 回切り替わることが大まかにわかります。 DMA を簡単に理解すると、I/O デバイスとメモリ間でデータを転送するときに、すべてのデータ転送タスクが DMA コントローラに引き渡され、CPU はデータ転送に関連する作業に一切関与しなくなります。 ④ゼロコピー方式 最適化により、CPU には 2 つのコンテキスト スイッチと 3 つのデータ コピーしかないことがわかります。 Linux システムでは、システム コール関数「sendfile()」が提供されており、システム コールは、カーネル バッファー内のデータをユーザー状態にコピーするのではなく、ソケット バッファーに直接コピーできます。 ⑤分割と細分化 前述したように、Kafka はパーティショニング モードを採用しており、各パーティションは物理セグメントに対応しています。検索時にはバイナリ検索に基づいて素早く見つけることができます。これにより、データ読み取りクエリの効率が向上するだけでなく、並列操作を行う手段も提供されます。 ⑥データ圧縮 Kafka は、データに対して Gzip や Snappy などの圧縮プロトコルを提供します。これにより、メッセージ構造が圧縮され、帯域幅とデータ転送の消費が削減されます。 Kafka のインストール①JDKをインストールする 圧縮パッケージを使用する場合は環境変数を自分で設定する必要があるため、yum を使用して直接インストールすることをお勧めします。現在の Java バージョンを確認する方法を理解しておいてください。
必要なバージョンをインストールします。ここでは 1.8 です。
インストールが成功したかどうかを確認します。
②Zookeeperをインストールする まず、公式 Web サイトにアクセスしてインストール パッケージをダウンロードし、解凍する必要があります。
必要なのは、このファイルをコピーして zoo.cfg という名前を付け、zoo.cfg で独自の設定を変更することだけです。
主な構成は次のように説明されます。
環境変数を設定します。
以下は起動が成功したことを示しています。 ③Kafkaをインストールする Kafka をダウンロード:
Kafka をインストールします。
環境変数を設定します。
Kafka を起動します。
完了です! 著者: He Yongkang、Tencent CDG バックエンド R&D エンジニア。 編集者:タオ・ジアロン 出典: 公開アカウント Yunjia コミュニティ (ID: QcloudCommunity) から転載、参照: 「Kafka の詳細な理解: コア設計実践原則」 |
<<: エッジコンピューティングとは具体的に何を意味するのでしょうか?
>>: メモリ管理は2つの部分から成ります: 仮想メモリ管理
外部リンクはオフサイト最適化効果を実現するための主な方法の1つと言えます。さらに、関連する外部リンク...
皆様、楽しい中秋節をお過ごし下さい!今日は役に立つ情報はありませんので、何もすることがなければ、両親...
概要: Windows XP が廃止された後、Microsoft はなぜ人気の「無料の付加価値サービ...
2024年の3分の1が過ぎました。周囲の状況を注意深く観察すると、さまざまなクラウド プラットフォー...
Linkerd の最新バージョン 2.12 がリリースされました。この大規模なバージョンでは、Lin...
virmach からの最新ニュース: OpenVZ 仮想化は廃止され、KVM に切り替えられる予定で...
ftlcloudは現在、夏のプロモーションを実施しています。米国サンノゼデータセンターのクラウドサー...
SEO 初心者のウェブマスターの友人の多くは、検索エンジンにブロックされることなく、ウェブサイトを完...
数年前、私は大きな敬意を持って SEO 業界に入りました。数年にわたる探求を経て、ようやく SEO ...
McKinsey & Company の最近の調査によると、クラウド コンピューティングの導...
国家郵政局の最新の公開情報によると、蘇寧電器は速達業務の運営許可を申請した。蘇寧電器は、JD.com...
新浪科技は8月30日朝、「3B」検索戦争が本格化する中、多くの拠点の百度代理店が社内通知を発行し、会...
飲料業界の専門家とコミュニケーションをとる過程で、私たちは一連の興味深い視点を観察しました。巨大飲料...
[[394145]]この記事は、Qiao Ke 氏が執筆した WeChat パブリックアカウント「運...
IT Times記者 ユー・シンフェイ2月1日、ついに待望の「情報セキュリティ技術公共・商業サービス...