Kafka がバージョン 2.8 で Zookeeper を「放棄」した理由

Kafka がバージョン 2.8 で Zookeeper を「放棄」した理由

[[394844]]

重量級のメッセージング ミドルウェアである Kafka が最近バージョン 2.8 をリリースし、Zookeeper への依存関係が正式に削除されたことに、皆さんも気付いたと思います。その背後にあるデザイン哲学は何ですか?外部への依存を減らすだけでしょうか?

答えは明らかにそれほど単純ではないので、ゆっくり説明しましょう。

理由を説明する前に、まず Zookeeper の典型的な使用シナリオを説明する必要があると思います。

1. Zookeeperの典型的な使用シナリオ

Zookeeper は、ビッグデータと分散フィールドの台頭と関連しています。ビッグデータにおける非常に重要な問題は、多数の安価なマシンを使用して信頼性の高いストレージを実現する方法です。

いわゆる安価な機械は故障する可能性が非常に高いですが、機械 1 台あたりのコストも非常に低いです。分散分野では、複数のマシンでクラスターを形成し、複数のマシン(レプリカ)にデータを保存することが期待されています。データの一貫性を保つために、通常はレプリケーション グループからマスター ノードを選択して、データの読み取りと書き込みを処理する必要があります。他のノードはマスターノードからデータをコピーします。マスターノードがダウンした場合、高可用性を実現するために、マスターノードを自動的に再選択する必要があります。

上記のシナリオでは、リーダー選挙という非常に重要な機能があります。マスターノードを選出し、マスターノードがダウンした後の自動再選出をサポートし、自動マスタースレーブ切り替えを実現して、高可用性を実現する方法。

Zookeeper が提供する一時的な順次ノードとイベント監視メカニズムを使用すると、リーダー選出を簡単に実装できます。

上記の t1 と t2 は、組織内に同じサービスを提供できるメンバーが複数いるが、コールド スタンバイ効果 (つまり、同時に外部にサービスを提供するメンバーは 1 つだけであり、これをリーダーと呼びます。リーダーがダウンしたり、サービスの提供を停止したりすると、組織内の他のメンバーが再びリーダーを奪い合い、外部にサービスを提供し続けます) を実現するために存在すると理解できます。

上の図に示すように、Zookeeper はクラスターにデプロイされており、単一点障害を効果的に回避し、クラスター内でデータの強力な一貫性を提供できます。

メンバーがリーダーをめぐって競争する必要がある場合、Zookeeper の助けを借りた実装ルーチンは、Zookeeper のデータ ノード (例では /app/order-service/leader) に 2 つの子ノードを作成することであり、それらは順番に一時的なノードになります。

クライアントは、作成されたノードのシーケンス番号が /app/order-service/leader 内で最も小さいシーケンス番号を持つノードであるかどうかを判断します。そうであれば、リーダーとなり、外部の世界にサービスを提供します。

シーケンス番号が最小でない場合、イベントはその前の登録ノードから削除されます。リーダーによって表されるプロセスがクラッシュすると、Zookeeper とのセッションは無効になり、それに関連付けられた一時ノードは削除されます。リーダーによって作成されたノードが削除されると、その後継ノードに通知され、リーダー選出が再度トリガーされて新しいリーダーが選出され、外部へのサービスの提供が継続され、サービスの高可用性が確保されます。

上記のシナリオを振り返ると、Zookeeper はリーダー選出を簡単に実装できるため、アプリケーションの可用性の向上が簡単になります。これは主に、Zookeeper のいくつかの機能を使用しているためです。

  • 一時ノード

一時ノードはセッションに関連付けられます。一時ノードを作成したセッションが終了すると、アプリケーションによる手動削除を必要とせずに、一時ノードは自動的に削除されます。

  • シーケンシャルノード
  • イベントの仕組み

イベント メカニズムの助けにより、Zookeeper は他の生き残ったアプリケーション ノードに即座に通知し、選出を再トリガーできるため、自動マスター/スレーブ切り替えの実装が非常に簡単になります。

2. カフカの動物園飼育員の緊急の必要性

Kafka では多くのリーダー選挙が行われます。 Kafka に精通している友人は、トピックに複数のパーティション (データ シャード) を含めることができ、各データ シャードに複数のコピーを構成できることを知っているはずです。パーティション内のデータの一貫性を複数のコピー間でどのように確保するかが緊急に必要になります。

Kafka の実装ルーチンでは、パーティションのコピーを複数作成し、その中からリーダーを選出してクライアントの読み取りおよび書き込み要求を処理します。スレーブ ノードはマスター ノードからコンテンツをコピーします。リーダー ノードは、データが正常に書き込まれたかどうかに基づいて、コピーにデータが正常に書き込まれたかどうかを判断します。

Kafka におけるトピック パーティション分散の概略図:

したがって、ここではリーダーの選出が必要ですが、これは Zookeeper に基づいて簡単に実現できます。それから二人は意気投合し、「新婚旅行」をスタートした。

3. 動物園飼育員の弱点

Zookeeper はクラスターにデプロイされます。クラスター内のノードの半分以上が稼働している限り、サービスを提供できます。たとえば、3 つのノードで構成される Zookeeper では、1 つの Zookeeper ノードに障害が発生しても、クラスターは引き続きサービスを提供できます。 5 つのノードで構成される Zookeeper では、2 つのノードに障害が発生しても問題ありません。

ただし、Zookeeper は CP モデルとして設計されているため、データの強力な一貫性を確保するには可用性を犠牲にする必要があります。

Zookeeper クラスターには、いわゆるリーダー ノードとスレーブ ノードも存在します。リーダー ノードは書き込みを担当し、リーダー ノードとスレーブ ノードは読み取り要求を受け入れることができます。ただし、Zookeeper の内部ノードが選出されると、Zookeeper 全体が外部サービスを提供できなくなります。もちろん、通常の状況であれば、選挙は非常に迅速に進むでしょうが、異常な状況下では、何とも言えません。たとえば、Zookeeper ノードでフル GC が発生した場合、その影響は壊滅的なものになります。

Zookeeper ノードで Full GC が頻繁に発生すると、クライアントとのセッションがタイムアウトになります。現時点ではクライアントのハートビート要求 (Stop World) に応答できないため、セッションに関連付けられた一時ノードは削除されます。この時点ですべての一時ノードが削除され、Zookeeper が依存するイベント通知メカニズムが失敗し、クラスター全体の選出サービスが失敗することに注意してください。

高可用性の観点から見ると、Kafka クラスターの可用性はクラスター自体だけでなく、外部コンポーネントにも依存します。長期的に見れば、これは明らかに優れた解決策ではありません。

分散分野の関連技術の継続的な改善に伴い、分散化の考え方が徐々に現れ、Zookeeperを排除すべきだという声がますます大きくなってきました。このプロセスで、非常に優れたアルゴリズムである Raft プロトコルが登場しました。

Raft プロトコルは、リーダー選出とログ複製という 2 つの重要なコンポーネントで構成されています。ログ レプリケーションにより、複数のレプリカに対して強力なデータ一貫性が実現します。注目すべき特徴は、Raft ノードが外部コンポーネントに依存しない分散型アーキテクチャであることです。代わりに、プロトコル クラスターとしてアプリケーションに埋め込まれ、つまり、アプリケーション自体と統合されます。

Kafka Topic の分散図を例にとると、Raft プロトコルのサンプル図は次のようになります。

この記事では Raft プロトコルについて詳しく説明するつもりはありませんが、リーダー選出のための別の実行可能なソリューションを提供し、サードパーティのコンポーネントに依存する必要がありません。では、なぜダメなのでしょうか?そのため、Kafka はバージョン 2.8 で最終的に Zookeeper を放棄し、Raft を採用しました。

<<:  世界三大クラウドコンピューティング大手が安定!アリババクラウドの市場シェアが過去最高を記録、グーグルを上回る

>>:  医療業界におけるマルチアクセスエッジコンピューティングの応用

推薦する

litemoe: 49元/月、3ネットワークcn2 gia VPS、1Gbps帯域幅、KVM/512Mメモリ/10gSSD/512Gトラフィック

litemoe さん、ロサンゼルスのトリプルネットワーク cn2 gia vps ラインの VPS ...

高品質なフレンドリーリンクの3つの評価基準

どの業界にも独自の基準があり、フレンドリーリンク業界でも同様です。高品質のフレンドリーリンクは、ウェ...

Pythonを使用して、初心者でも理解できる分散型Zhihuクローラーを作成します。

Zhihu のユーザーデータを収集するというアイデアは、かなり以前からありました。このアイデアを実現...

Alibaba Public DNSが正式にリリースされました: 223.5.5.5 223.6.6.6は再帰的なソリューションを提供します

Alibaba パブリック DNS が正式にリリースされました: 223.5.5.5 223.6.6...

SEO Taobao: 適者生存、前進しなければ後退する

シングルページのタオバオアフィリエイトは、もはや市場需要がないのでしょうか、それとも将来のインターネ...

個人ブログでソフト記事マーケティング戦略を議論する

Web2.0の代表的な存在であるブログは、ファンが自分の個人ブログを作成し、学習体験を共有したり、日...

新しいサイトが検索エンジンの審査期間に入るときに注意すべき 5 つの基本事項

最近の検索エンジンのアルゴリズムの継続的な変更により、新しいサイトが直面する問題がますます顕著になっ...

SSDVPS-512M メモリ (第 2 世代 VZ) + 20GSSD/月額 3.5 USD/QuadraNet

ssdvps.com は 2009 年に登録されたドメイン名です。公式ウェブサイトには関連情報があり...

今週のニュースレビュー: 百度のアルゴリズム更新、淘宝網の再設計写真が流出

1. 中国の共同購入サイトの数は2,919に減少し、毎日5.9サイトが消滅している。昨日、共同購入ナ...

domain.com 4月の割引コード

domain.com は、4 月 31 日まで有効な 3 つの割引コードを発行しました。これは、ドメ...

PaaS、IaaS、SaaS、Bass、Fass、サーバーレスの理解と違い

クラウド コンピューティングにはさまざまな定義があります。現時点で最も広く受け入れられている定義は、...

キーワード競争の激しさを判断する

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

ガートナーは、パブリッククラウドに対する世界のエンドユーザーの支出が2023年に約6,000億ドルに達すると予測している。

ガートナーの最新予測によると、パブリッククラウドサービスに対する世界のエンドユーザー支出は2023年...

vpsag: ブルガリアの VPS、月額 3 ユーロ、2G メモリ/1 コア/20g SSD/10T トラフィック、100G 防御

vpsag は現在、ブルガリアのソフィア データ センターで VPS 事業を運営しており、デフォルト...