カフカはどんな悪意を持っているのでしょうか?ただ、飼育員にひどく傷つけられただけなのですが...

カフカはどんな悪意を持っているのでしょうか?ただ、飼育員にひどく傷つけられただけなのですが...

最近、Confluent コミュニティが記事を公開しました。この記事では主に、Kafka の将来のバージョン 2.8 で Zookeeper が廃止されることについて説明されており、これは Kafka ユーザーにとって重要な改善点です。以前は、Kafka をデプロイするときに Zookeeper をデプロイする必要がありましたが、現在は Kafka のみをデプロイすれば済みます。 [1]

1. Kafka の紹介

Apache Kafka は最初に Linkedin によって開発され、後に Apack Foundation に寄贈されました。

Kafka は分散ストリーム処理プラットフォームとして正式に定義されており、高いスループット、永続性、水平スケーラビリティを備えているため広く使用されています。現在、Kafka には次の特定の機能があります。

  • メッセージ キュー、Kafka には、システム分離、トラフィック ピークの削減、バッファリング、非同期通信などのメッセージ キューの機能があります。
  • 分散ストレージ システムである Kafka は、メッセージを永続化し、複数のコピーを使用してフェイルオーバーを実装できるため、データ ストレージ システムとして使用できます。
  • リアルタイムデータ処理のために、Kafka は、リアルタイムデータを処理する機能を持つ Kafka Streams や Kafka Connect などのデータ処理に関連するいくつかのコンポーネントを提供します。

次の図はKafkaのメッセージモデルを示しています。[2]

上の図を通して、Kafka のいくつかの主要な概念を紹介します。

  • プロデューサーとコンシューマー: メッセージ キュー内のプロデューサーとコンシューマー。プロデューサーはキューにメッセージをプッシュし、コンシューマーはキューからメッセージをプルします。
  • コンシューマー グループ: 同じトピックの異なるパーティションからのメッセージを並行して消費できるコンシューマーのコレクション。
  • ブローカー: Kafka クラスター内のサーバー。
  • トピック: メッセージ カテゴリ。
  • パーティション: トピックの物理的なグループ化。トピックにはパーティションを設定できます。各パーティション内のメッセージには、オフセットとして順序付けられた ID が割り当てられます。各コンシューマー グループには、パーティションを消費するコンシューマーが 1 つだけ存在します。

2. Kafka と Zookeeper の関係

Kafka のアーキテクチャは次のとおりです。

図からわかるように、Kafka の作業には Zookeeper の協力が必要です。それで、それらはどのように連携するのでしょうか?

下の写真をご覧ください。

1. 登録センター

1) ブローカー登録

上図からわかるように、ブローカー分散展開では、統一管理のために登録センターが必要です。 Zookeeper は、ブローカー サービス リスト (/brokers/ids) を保存するために専用のノードを使用します。

ブローカーが起動すると、Zookeeper に登録要求が送信されます。 Zookeeper は、/brokers/ids の下に /brokers/ids/[0...N] などのブローカー ノードを作成し、ブローカーの IP アドレスとポートを保存します。

このノードは一時ノードです。ブローカーがダウンすると、この一時ノードは自動的に削除されます。

2) トピック登録

Zookeeper はトピックに個別のノードも割り当て、各トピックは /brokers/topics/[topic_name] の形式で Zookeeper に記録されます。

トピックのメッセージは複数のパーティションに保存され、これらのパーティションとブローカー間の対応も Zookeeper に保存する必要があります。

パーティションは複数のコピーで保存されます。上図の赤いパーティションはリーダーコピーです。リーダー レプリカが配置されているブローカーに障害が発生した場合、パーティションはリーダーを再選出する必要があり、これは Zookeeper によって実行される必要があります。

ブローカーが起動されると、ブローカー ID が対応するトピック ノードのパーティション リストに登録されます。

次のコマンドを使用して、xxx​​ という名前のトピックとパーティション番号 1 の情報を確認します。

  1. [root@master] /brokers/topics/xxx/partitions/1/state を取得します
  2. { "controller_epoch" :15、 "leader" :11、 "version" :1、 "leader_epoch" :2、 "isr" :[11,12,13]}

ブローカーが終了すると、Zookeeper は対応するトピックのパーティション リストを更新します。

3) 消費者登録

コンシューマー グループも Zookeeper に登録され、Zookeeper は関連データを保存するためにコンシューマー グループにノードを割り当てます。ノード パスは /consumers/{group_id} で、次に示すように 3 つの子ノードがあります。

このようにして、Zookeeper はパーティションとコンシューマーの関係、およびパーティションのオフセットを記録できます。 [3]

2. 負荷分散

ブローカーが Zookeeper に登録されると、プロデューサーはブローカー ノードに基づいてブローカー サービス リストの変更を認識し、動的な負荷分散を実現します。

コンシューマー グループ内のコンシューマーは、トピック ノード情報に基づいて特定のパーティションからメッセージをプルし、負荷分散を実現できます。

実際、次の図に示すように、Kafka は Zookeeper に大量のメタデータを保存します。

ブローカー、トピック、パーティションの数が増えるにつれて、保存されるデータの量はますます大きくなります。

3. コントローラの紹介

前のセクションの説明から、Kafka は Zookeeper に大きく依存していることがわかります。 Kafka は Zookeeper なしでは独立して実行できません。では、Kafka は Zookeeper とどのようにやり取りするのでしょうか?

以下に示すように:[4]

Kafka クラスター内のブローカーが、Zookeeper と対話するコントローラーとして選出されます。 Kafka クラスター全体のすべてのパーティションとレプリカのステータスを管理する役割を担います。他のブローカーは、コントローラー ノード上のデータの変更を監視します。

コントローラーの選択は Zookeeper に依存します。選出が成功すると、Zookeeper は一時的なノード / コントローラーを作成します。

管理者の具体的な責任は次のとおりです。

パーティションの変更を監視する

たとえば、パーティションのリーダーに障害が発生すると、コントローラはパーティションの新しいリーダーを選出します。パーティションの ISR セットで変更が検出されると、コントローラはすべてのブローカーにメタデータを更新するように通知します。トピックがパーティションを追加すると、コントローラーがパーティションの再割り当てを担当します。

  • トピック関連の変更を監視する
  • ブローカー関連の変更を監視する
  • クラスターメタデータ管理

次の図は、コントローラー、Zookeeper、ブローカー間の相互作用の詳細を示しています。

コントローラーが正常に選出されると、Zookeeper クラスターからメタデータの完全なセットが取得され、ControllerContext が初期化され、このメタデータがコントローラー ノードにキャッシュされます。トピック パーティションの追加など、クラスターが変更されると、コントローラーはローカル キャッシュ データを変更するだけでなく、この変更情報を他のブローカーと同期する必要もあります。

コントローラーは、Zookeeper イベント、スケジュールされたタスク イベント、およびその他のイベントを監視した後、これらのイベントを順番に LinkedBlockingQueue に一時的に保存し、イベント処理スレッドが順番に処理します。これらのプロセスのほとんどは Zookeeper とのやり取りを必要とし、コントローラーは独自のメタデータを更新する必要があります。

4. Zookeeper によって引き起こされる問題

Kafka 自体は分散システムですが、それを管理するには別の分散システムが必要であり、間違いなく複雑さが増します。

1. 運用と保守の複雑さ

Zookeeper を使用する場合、Kafka を導入する際に 2 つのシステムを導入する必要があり、Kafka の運用保守担当者は Zookeeper の運用保守能力を備えている必要があります。

2. コントローラ障害処理

Kafka は、Zookeeper と対話するために単一のコントローラー ノードに依存します。このコントローラー ノードに障害が発生した場合は、ブローカーから新しいコントローラーを選択する必要があります。下の図に示すように、新しいコントローラーは broker3 になります。

新しいコントローラーが正常に選出されると、初期化のために Zookeeper からメタデータが再度取得され、他のすべてのブローカーに ActiveControllerId を更新するように通知する必要があります。古いコントローラーは、リスニング、イベント処理スレッド、およびスケジュールされたタスクをシャットダウンする必要があります。パーティションの数が非常に多い場合、このプロセスには非常に時間がかかり、このプロセス中は Kafka クラスターは動作できません。

3. パーティションのボトルネック

パーティションの数が増えると、Zookeeper に保存されるメタデータの量が増加し、Zookeeper クラスターへの負荷が増加します。一定のレベルに達すると監視の遅延が増加し、Kafka の動作に影響します。

したがって、単一の Kafka クラスターによって実行されるパーティションの数がボトルネックになります。そして、これはまさに一部のビジネス シナリオで必要なことです。

5. アップグレード

アップグレード前とアップグレード後のアーキテクチャ図を比較すると、次のようになります。

KIP-500 は、以前のコントローラーを Quorum コントローラーに置き換えます。クォーラム内の各コントローラー ノードはすべてのメタデータを保存し、KRaft プロトコルを通じてレプリカの一貫性を確保します。この方法では、クォーラム コントローラー ノードに障害が発生した場合でも、新しいコントローラーの移行は非常に高速になります。

公式紹介によれば、アップグレード後、Kafka は数百万のパーティションを簡単にサポートできるようになります。

Kafkaチームは、Raftプロトコル(略してKRaft)を介してデータを同期する方法であるKafka Raftメタデータモードと呼んでいます。

Kafka のユーザーベースは非常に大きいため、サービスを停止せずにアップグレードする必要があります。

現在、Zookeeper を削除する Kafka コード KIP-500 がトランク ブランチに送信され、バージョン 2.8 でリリースされています。

Kafka はバージョン 3.0 で Zookeeper Controller および Quorum Controller と互換性を持たせ、ユーザーがグレースケール テストを実行できるようにする予定です。 [5]

VI.結論

大規模クラスターやクラウドネイティブのコンテキストでは、Zookeeper を使用すると、Kafka の運用と保守、クラスターのパフォーマンスに大きな負担がかかります。 Zookeeper を削除することは避けられない傾向であり、シンプルさというアーキテクチャの考え方にも沿っています。

参考文献

[1]https://www.confluent.io/blog/kafka-without-zookeeper-a-sneak-peek/

[2]https://blog.csdn.net/Zidingyi_367/article/details/110490910

[3]https://www.jianshu.com/p/a036405f989c

[4]https://honeypps.com/mq/kafka-controller-analysis/

[5]https://mp.weixin.qq.com/s/ev6NM6hptltQBuTaCHJCQQ

<<:  デジタルトランスフォーメーションの神話とSaaSのチャンス

>>:  リソース キューは、AnalyticDB PostgreSQL のリソース管理をどのように実装しますか?

推薦する

検索結果のパーソナライゼーションが SEO に与える影響

パーソナライズされた検索結果により、誰もが目にする検索結果が自分に合わせて調整されているように見える...

Alibaba Cloudが第4世代X-Dragonアーキテクチャをリリース、クラウドコンピューティングが初めて5マイクロ秒のレイテンシ時代へ

10月20日、アリババクラウドは2021年雲奇カンファレンスにおいて、飛天クラウドオペレーティングシ...

backupsy-$6/KVM/512M メモリ/250g ハードディスク/1T トラフィック/G ポート/9 コンピュータ ルーム

2010年に設立されたbackupsyは、まもなく2周年を迎えます。現在、顧客向けに811Tのストレ...

raksmart: 米国\香港\日本\韓国\シンガポール、独立サーバーは月額 46 ドルから、10G の大容量帯域幅\300G の高防御 (CC は無視)\マルチ C セグメント クラスター サーバー

良い海外サーバーを探したいですか?香港サーバー、日本サーバー、韓国サーバー、アメリカサーバーがあり、...

Qiyiマーケティングモバイルフォンは、唯一の安全なWeChatクローンシステムである別のブラックテクノロジーを開発しました

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますクローンシ...

マルチクラウドと分散コンピューティングを使用して企業のデータ課題を解決する方法

多くの企業がクラウド コンピューティングを IT 戦略に取り入れています。ますます多くの IT 予算...

簡単な分析:WeChatパブリックアカウントの命名に関する8つのヒント

優れた公共アカウントには、高品質のコンテンツや革新的な計画やサービスが必要です。しかし、適切な名前は...

天一インターネット: 香港 VPS フリー、1G メモリ/2 コア/30g ハードディスク/3M 帯域幅

Tianyi Interconnect は主に中国 (中国本土、香港、台湾を含む)、韓国、日本、フィ...

クラウド データ セキュリティのベスト プラクティスを学びましたか?

クラウド上のデータ セキュリティのベスト プラクティスには、セキュリティの基礎の理解と実装、責任共有...

9月22日の百度インデックスボリュームの全体的な減少の理由の分析

9月22日、多くのウェブマスターが、Baiduのサイトコマンドを使用したところ、自分のウェブサイトの...

ミニゲーム開発者の広告収入は50-50で分配されるべきでしょうか?そこから利益を得るには、少なくとも 100 万 DAU が必要です...

最近、 WeChatの公式パブリックアカウントは、ミニプログラム開発者を奨励しサポートするために、2...

クラウド ストレージ製品を審査する際に尋ねるべき 7 つの基本的な質問

クラウド ストレージの使用は、多くの企業がクラウド コンピューティング テクノロジーを導入する最初の...

モノのインターネットとクラウドコンピューティングの関係は何ですか?

「モノのインターネット」(IoT)は、電子的に相互接続された物理的なモノのネットワークを表します。 ...

ウェブサイトのスナップショットとランキングを向上させるための合理的なコンテンツの更新と最適化

SEO 最適化には多くの最適化テクニックがあります。これらのテクニックを習得し、それを実践すれば、ウ...