数日前、私のグループの友人が私に尋ねました: Kafka の優先度レプリカを変更するにはどうすればいいですか?パーティション内のレプリカの 1 つをリーダーとして指定する必要があります。 ここに画像の説明を挿入 需要分析この問題は、私たちの生産環境では非常によく発生します。多くの場合、トピック内のパーティションのリーダーを変更する必要があります。 たとえば、topic1-0には3つのレプリカ[0,1,2]があります。 「優先レプリカ」ルールに従って その場合、レプリカ 0 がリーダーである必要があります。パーティション内のリーダー レプリカのみが読み取り/書き込みレプリカを提供することは誰もが知っています。 その他のコピーはバックアップとして使用されます。場合によっては、コピー0のパフォーマンスリソースが不足していたり、ネットワークが良好でなかったり、IOの負荷が高かったりするなど、 これは間違いなく、トピックの全体的な読み取りおよび書き込みパフォーマンスに大きな影響を与えます。このとき、リーダーとしてプレッシャーの少ないレプリカに切り替えることが非常に重要です。 優先レプリカ: パーティション内のAR(すべてのレプリカ)情報、最初のレプリカがリーダーとして選択される リーダーメカニズム: パーティションには読み取りと書き込みを担当するリーダーが 1 つだけ存在し、他のレプリカはバックアップとしてのみ使用されます。 では、そのような要件をどのように達成するのでしょうか? 解決原理を理解すれば、それに応じた解決策を考えることができます。パーティションの AR の最初の位置を、指定したコピーに置き換えるだけです。 AR = {0,1,2} ==> AR = {2,1,0} この目標を達成するには、一般的に 2 つの解決策があります。以下で分析してみましょう。 解決策1: パーティションレプリカの再配布これまでにパーティション レプリカの再配布に関する記事を多数書きました。パーティション レプリカの再配布、データ移行、レプリカの拡張と縮小について詳しく知りたい場合は、リンクされた記事をお読みください。ここで簡単にお話しします。 一般に、パーティション レプリカの再配布には主に 3 つのプロセスがあります。
ここでは主にステップ2を見て、移行ファイルが一般的にどのようになっているかを確認します。
この移行 Json は、topic1 のパーティション 0 のレプリカが [0,1,2] に分散されることを意味し、つまり topic1 のパーティション 0 には最終的に {brokerId-0,brokerId-1,brokerId-2} に 3 つのレプリカが存在することになります。 以前書いたパーティションレプリカ再分配原則のソースコード分析を読んだことがあるなら、間違いなく知っているだろう。 以前の割り当て方法が何であっても、最終的なコピー割り当ては [0,1,2] になります。コピー数が多いものは削除され、コピー数が少ないものが追加されます。 それで、私たちのニーズを満たしたい場合は、このJSONファイル内の「replicas」: [0,1,2]を変更するだけでいいのでしょうか? たとえば、これを "replicas": [2,1,0] に変更します。Json を変更した後、それを実行すると、再配布プロセスが正式に開始されます。移行が完了すると、リーダーが上記の最初の位置のレプリカ「2」になっていることがわかります。 長所と短所 利点: 要件が満たされ、リーダーが積極的に切り替えられる デメリット: 操作が複雑で、エラーが発生しやすくなります。まず元のパーティション割り当てデータを取得し、次に Json ファイルを手動で変更する必要があります。ここでは間違いが起きやすく、その影響も比較的大きくなります。もちろん、これらは検証インターフェースを通じて制限できます。最も重要な点は、レプリカの再配布には現時点では 1 つのタスクしか存在しないことです。現在「レプリカ再配布」タスクがある場合、ここでは実行できません。 「レプリカの再配布」は比較的「重い」操作であり、エラーはクラスターに大きな影響を与えます。 解決策2: AR注文を手動で変更するまず、パーティション レプリカ割り当てデータは Zookeeper のノード brokers/topics/{topicName} に保存されていることがわかります。 Topic1 のノード データの例を見てみましょう。
データの説明: バージョン: バージョン情報。現在、「1」と「2」の 2 つのバージョンがあります。 removed_replicas: 削除する必要があるレプリカ データ。パーティション レプリカの再配布プロセス中に、データ移行がほぼ完了すると、余分なレプリカは削除されます。削除が成功すると、ここのデータは消去されます adding_replicas: 追加する必要があるレプリカ データ。パーティション レプリカの再配布プロセス中に、新しく追加されたレプリカが追加されます。追加が完了すると、ここにあるデータはクリアされます。 パーティション: トピックのすべてのパーティション コピーの割り当て方法。上記は、合計 5 つのパーティションとそれに対応するコピー場所があることを示しています。 これを知った上で、優先レプリカを変更したい場合は、Zookeeper 内のノードデータを直接変更するだけでよいのでしょうか?たとえば、パーティション「1」のレプリカの場所を[2,1,3]に変更します。 これを変更した後でも、たとえばkafkaコマンドを実行して、優先レプリカを再選出する必要があります。
--election-type : PREFERRED これは優先コピーモードでの再選出を意味します つまり、これら 2 つの手順を完了すると、優先コピーを変更するという目標は達成されたことになります...? 実際にはそうではありません。なぜなら、ここではZookeeperノードのデータのみが変更されるからです。 bin/kafka-leader-election.sh の再選出操作はコントローラーによって実行されます。コントローラーの役割とソースコードを十分に理解している場合 コントローラーは各トピックのパーティションレプリカ情報を JVM メモリに保存することがわかっています。次に、Zookeeper 内のノードを手動で変更します。これにより、コントローラーが独自のメモリを更新するようにトリガーされません。 つまり、kafka-leader-election.sh を実行しても、優先レプリカは変更を認識しないため、まったく変更されません。 この問題の解決も非常に簡単です。コントローラーにデータの変更を認識させるだけです。最も簡単な方法は、コントローラーにデータを再選択させて再ロードさせることです。 要約する Zookeeper の「AR」順序を手動で変更する コントローラーの再選出 パーティションレプリカの再選出操作を実行する(優先レプリカ戦略) シンプルなコード もちろん、上記の機能は LogiKM に統合する必要があります。簡単なコードは以下のとおりです
長所と短所 利点: 目標需要を達成、シンプル、操作が簡単 デメリット: コントローラの頻繁な再選出は、実稼働環境に何らかの影響を及ぼします。 最適化と改善2 番目の解決策では、コントローラーを再選する必要があります。頻繁な選挙は間違いなく生産環境に影響を与えます。コントローラーには、パーティション レプリカの再配布、トピックの削除、リーダーの選出など、多くの責任があります。 では、コントローラーを再選せずにニーズを満たすにはどうすればよいでしょうか? 私たちの要件は、Zookeeper でノード データを変更すると、コントローラーがそれをすぐに認識し、独自のメモリ データを更新できることです。 この問題については次の記事で紹介します。 質問この記事を読んだ後、考えるべきいくつかの関連する質問をしたいと思います。 順序を変更するだけでなく、コピーを追加または削除して zk の「AR」情報を変更するとどうなりますか? brokers/topics/{topicName}/partitions/{partition number}/state ノードのリーダー情報を手動で変更した場合、リーダーを直接更新できますか? レプリカ選挙プロセス全体はどのようなものですか? 考えてみて下さい、その質問に対する答えを以下の記事で一つずつ解説していきます! |
<<: Kubernetes ソースコード分析: リソースと API
>>: システムとカオスのテスト: クラウドの回復力へのアプローチ
5月27日、百度雲計算(上海)有限公司が登録資本金15億元で設立された。法定代表者は張炳華であり、百...
justhost から良いニュースが届きました: (1) すべての VPS は、トラフィック制限なし...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますウェブサイ...
1つ目: 文章置換法同義語を置き換えるための特別なソフトウェアがありますが、お勧めできません。テキス...
運用においては、ユーザー数と収益が最も重要な 2 つの指標です。新規ユーザーの維持率を高め、既存ユー...
alwyzon(Hohl IT eUのブランド)は、オランダ(データセンターはオランダ東部の都市アペ...
ニューヨークを拠点とするゲームチケット販売サイト TiqIQ は本日、シリーズ A ラウンドで 17...
百度が重複コンテンツの取り締まりを強化したことで、「世の中のほとんどの記事はコピーされている」という...
Zenlayerはベトナムのハノイとホーチミン市に独自のデータセンターを展開し、ベトナムCDNノード...
ニュース マーケティングは、企業にとって最も一般的に使用される企業宣伝およびマーケティング モデルで...
51CTO.com+プラットフォームは、オリジナルの技術コンテンツの選択と絶妙なレイアウトを通じて、...
インターネットは巨大な金鉱です。適切なターゲットを見つければ、確実に利益を上げることができます。しか...
月給5,000~50,000のこれらのプロジェクトはあなたの将来です企業は、売り上げを増やし、より多...
新しいインターネット アプリケーションは、誕生から普及に至るまで、常にチャンス、課題、あらゆる場所で...
業界の競争は、どのプラットフォームであっても存在します。インターネットの普及と発展により、オンライン...