Kafka コア コントローラ Kafka クラスターには 1 つ以上のブローカーがあり、そのうちの 1 つがコントローラー (Kafka コントローラー) として選出され、クラスター全体のすべてのパーティションとレプリカのステータスを管理する役割を担います。
コントローラ選出メカニズム Kafka クラスターが起動すると、ブローカーがクラスター全体を管理するコントローラーとして自動的に選出されます。選出プロセスでは、クラスター内の各ブローカーが Zookeeper 上に /controller 一時ノードを作成しようとします。 Zookeeper は、ブローカーが 1 つだけ正常に作成されるようにし、このブローカーがクラスターのマスター コントローラーになります。このコントローラー ロールのブローカーがダウンすると、Zookeeper の一時ノードは消えます。クラスター内の他のブローカーは、この一時ノードをリッスンし続けます。一時ノードが消えたことに気付いた場合、彼らは再び一時ノードを作成するために競争するでしょう。これが上で述べた選挙の仕組みです。 Zookeeper は、1 つのブローカーが新しいコントローラーになることを保証します。
Zookeeper からトピック、パーティション、ブローカーに関連するすべての最新情報を読み取り、それに応じて管理します。トピック内のパーティション割り当ての変更を監視するには、すべてのトピックに対応する Zookeeper の /brokers/topics/[topic] ノードに PartitionModificationsListener を追加します。 クラスターのメタデータ情報を更新し、他の共通ブローカー ノードと同期します。 パーティションレプリカリーダー選出メカニズム コントローラーは、パーティション リーダーが配置されているブローカーがクラッシュしたことを感知します (コントローラーは多数の zk ノードを監視しており、ブローカーが稼働していることを感知できます)。コントローラーは、各パーティションのレプリカ リストから最初のブローカーをリーダーとして選択します。もちろん、このブローカーも ISR リストに含まれている必要があります。 消費者消費メッセージのオフセット記録メカニズム 各コンシューマーは、その消費パーティションのオフセットを Kafka の内部トピック __consumer_offsets に定期的に送信します。送信時のキーは consumerGroupId+トピック+パーティション番号、値は現在のオフセット値です。 Kafka はトピック内のメッセージを定期的にクリーンアップし、最終的に最新のデータを保持します。 __consumer_offsets は高同時実行リクエストを受信する可能性があるため、Kafka はデフォルトで 50 個のパーティションを割り当てます (offsets.topic.num.partitions で設定可能)。これにより、マシンを追加することで高同時実行に耐えることができます。 消費者再調整メカニズム コンシューマーの再バランスとは、コンシューマー グループ内のコンシューマーがクラッシュした場合、そのコンシューマーに割り当てられているパーティションが他のコンシューマーに自動的に与えられることを意味します。再起動すると、一部のパーティションが復元されます。 注: 再バランスは、サブスクライブでパーティションの消費が指定されていない場合にのみ適用されます。パーティションが割り当て消費を通じて指定されている場合、Kafka は再バランスを行いません。 次のような状況は消費者の再調整を引き起こす可能性がある。
リバランスプロセス フェーズ1: グループコーディネーターの選定 グループ コーディネーター: 各コンシューマー グループは、グループ コーディネーターとしてブローカーを選択します。ブローカーは、コンシューマー グループ内のすべてのコンシューマーのハートビートを監視し、それらがダウンしているかどうかを判断し、コンシューマーの再バランス調整を有効にする責任を負います。 コンシューマー グループ内の各コンシューマーが起動すると、対応するグループ コーディネーター GroupCoordinator を見つけてネットワーク接続を確立するために、Kafka クラスター内のノードに FindCoordinatorRequest リクエストが送信されます。 グループコーディネーターの選択方法: 次の式を使用して、コンシューマーによって消費されたオフセットを送信する __consumer_offsets のパーティションを選択できます。このパーティションのリーダーに対応するブローカーは、このコンシューマー グループのコーディネーターです。 式: hash(コンシューマーグループID) % __consumer_offsets トピック内のパーティション数 フェーズ2: 消費者グループに参加する JOIN GROUP コンシューマ グループに対応する GroupCoordinator を正常に見つけたら、コンシューマ グループに参加する段階に入ります。この段階で、コンシューマーは GroupCoordinator に JoinGroupRequest リクエストを送信し、応答を処理します。次に、GroupCoordinator は、コンシューマー グループに参加する最初のコンシューマーをリーダー (コンシューマー グループ コーディネーター) として選択し、コンシューマー グループ情報をリーダーに送信します。リーダーは、パーティション プランの作成を担当します。 フェーズ3(同期グループ) コンシューマー リーダーは GroupCoordinator に SyncGroupRequest を送信し、GroupCoordinator は各コンシューマーにパーティション スキームを送信します。指定されたパーティションのリーダー ブローカーに従って、ネットワークに接続し、メッセージを消費します。 消費者再バランスパーティション割り当て戦略 主なリバランス戦略には、範囲、ラウンドロビン、スティッキーの 3 つがあります。 Kafka は、コンシューマーとサブスクライブされたトピック間のパーティション割り当て戦略を設定するためのコンシューマー クライアント パラメーターの part.assignment.strategy を提供します。デフォルトの割り当て戦略は範囲です。 トピックに 10 個のパーティション (0 ~ 9) があり、次のものを消費するコンシューマーが 3 人いるとします。
2 つの目標が矛盾する場合は、最初の目標が 2 番目の目標よりも優先されます。これにより、元のパーティション割り当て戦略を最大限に維持できます。 たとえば、最初の範囲割り当ての場合、3 番目のコンシューマーが切断すると、スティッキー戦略を使用した再割り当ての結果は次のようになります。
プロデューサーメッセージ発行メカニズムの分析 1. 書き方 プロデューサーはプッシュ モードを使用してブローカーにメッセージを公開します。各メッセージは、ディスクへの順次書き込みであるパターンに追加されます (ディスクへの順次書き込みは、メモリへのランダム書き込みよりも効率的であり、Kafka のスループットを保証します)。 2. メッセージルーティング プロデューサーがブローカーにメッセージを送信すると、パーティション分割アルゴリズムに基づいて、どのパーティションにメッセージを保存するかが選択されます。ルーティングのメカニズムは次のとおりです。1. パターンが指定されている場合は、それが直接使用されます。 2. パターンが指定されていないがキーが指定されている場合は、キー値をハッシュすることによってパターンが選択されます。 3. パターンもキーも指定されていない場合は、ポーリングによってパターンが選択されます。 3. 執筆プロセス
HWとLEOの詳細な説明 HW は一般にハイ ウォーター マーク (HighWatermark の略) として知られています。パーティションに対応する ISR 内の最小の LEO (ログ終了オフセット) が HW として取得されます。消費者は最大で HW が配置されている位置までしか消費できません。さらに、各レプリカには HW があり、リーダーとフォロワーはそれぞれ自身の HW のステータスを更新する責任があります。リーダーが新たに書き込んだメッセージについては、消費者はそれをすぐに消費することはできません。リーダーは、メッセージが ISR 内のすべてのレプリカによって同期されるのを待機し、その後 HW を更新します。そうして初めて、メッセージは消費者によって消費されるようになります。これにより、リーダーが配置されているブローカーに障害が発生した場合でも、新しく選出されたリーダーからメッセージを取得できるようになります。内部ブローカーからの読み取り要求の場合、HW 制限はありません。 例えば、プロデューサーがブローカーにメッセージを生成する場合、ISR、HW、LEOのフロープロセスが このことから、Kafka のレプリケーション メカニズムは、完全に同期したレプリケーションでも、完全に非同期のレプリケーションでもないことがわかります。実際、同期レプリケーションでは、メッセージがコミットされる前に、すべての作業中のフォロワーがレプリケーションを完了している必要があります。このレプリケーション方法はスループット レートに大きく影響します。非同期レプリケーションでは、フォロワーはリーダーからデータを非同期的にコピーします。データがリーダーによってログに書き込まれている限り、コミットされたとみなされます。この場合、フォロワーがコピーを完了しておらずリーダーより遅れており、リーダーが突然クラッシュすると、データが失われます。 Kafka の ISR の使用により、データが失われないこととスループット レートの間で適切なバランスが保たれます。 HWとLEOを組み合わせてacks=1の状況を確認する |
<<: テンセントクラウドは複数の新製品の発売によりデータからより多くの価値を引き出します
2012年6月末以来、Baiduは継続的にアルゴリズムを変更し、ウェブサイトを禁止しており、数え切れ...
五劫の年の春、清明節には何もすることがありませんでした。今日、空に浮かぶ雲を見て、昨年の雲の中での戦...
aquanx が HostCat で最後に言及されたのは、今年の 6 月でした。6 年が経過し、aq...
[[412483]]エッジ コンピューティングは、分散コンピューティング、グリッド コンピューティン...
スキルとヒントは、一般的に成功体験を共有することです。Taobao の顧客プロモーションの目的は、ト...
Hostkey のオランダのデータセンターは、ビデオスライスサーバー、トランスコーディングサーバー、...
hostwindsはどうですか? Hostwindsは良いですか?今日は、Hostwinds のダラ...
contabo はドイツの古いブランドです。ドイツに 2 つの独立したコンピュータ ルームを所有して...
中国の共同購入サイトの数は2,919に減少し、毎日5.9サイトが消滅している。昨日、共同購入ナビゲー...
垂直検索の市場はあるのでしょうか?垂直検索の市場があるかどうかは、批評家の主観的な判断ではなく、市場...
2006年に設立されたオランダのVPSブランドであるLiteserver.nlは、今年のブラックフラ...
現在、多くの企業がオンラインマーケティングを行っていますが、オンラインマーケティングとは何かを明確に...
シャンダ文学のCEO、ホウ・シャオチアン氏。この新聞の地図製作者、何江氏数百人の著者が共同で声明を発...
フォーラムやブログの外部リンクを増やすためのチャネルとメソッドは、少なくとも1日の外部リンクがありま...
SEO 担当者として、あなたの苗字は Fu ですか? 多くの SEO 担当者は、自分の苗字は Fu ...