Kafka の運用とメンテナンス |データ移行を本当に理解していますか?

Kafka の運用とメンテナンス |データ移行を本当に理解していますか?

[[420468]]

この記事では以下の内容を説明します

[Kafka 運用保守] レプリカの拡張と縮小、データ移行、レプリカの再配布、レプリカのクロスパス移行

スクリプトパラメータ

パラメータ説明する
--zookeeper ZooKeeperに接続する --zookeeper  ローカルホスト:2181、ローカルホスト:2182
--topics-to-move-json-file トピック設定のコンテンツを含むjsonファイルを指定します

--topics-to-move-json-file config/move-json-file.json   Json ファイルの形式は次のとおりです。

--generate レプリカの再配布戦略を提示してみてください。このコマンドは実際には実行されません。
--broker-list --generateとともに使用される割り当て戦略を与えるために特定の BrokerList を指定します。 --broker-list   0,1,2,3
--reassignment-json-file --executeで使用する再配布する json ファイルを指定します。

json ファイルの形式は次のとおりです。

--execute --reassignment-json-fileとともに使用して再割り当てタスクを開始します。
--verify タスクが正常に実行されたかどうかを確認します。 --throttle電流制限が使用されている場合、このコマンドは電流制限も削除します。このコマンドは非常に重要です。現在の制限を削除しないと、レプリカ間の通常の同期に影響します。
--throttle 移行プロセス中のブローカー間の現在のプロセス転送速度(バイト/秒) -- throttle 500000
--replica-alter-log-dirs-throttle ブローカー内部レプリカのクロスパス移行データフロー制限機能は、あるディレクトリから別のディレクトリへのデータコピーの帯域幅をバイト/秒単位で制限します。 --replica-alter-log-dirs-throttle   100000
--disable-rack-aware ラック認識を無効にし、割り当て時にラック情報を参照しません。
--bootstrap-server このパラメータは、レプリカがパス間で移行される場合に必要です。

1. スクリプトの使用方法の紹介

このスクリプトは、パーティションを再配布するために Kafka によって提供されるスクリプト ツールです。

1.1 推奨設定スクリプトを生成する

キーパラメータ --generate

パーティションのレプリカを再配布する前に、次の方法で適切な割り当てファイルを取得することをお勧めします。 move-json-file.json ファイルを書き込みます。このファイルは、どのトピックを再配布するかの計算を示します

  1. {
  2. 「トピック」 : [
  3. { "トピック" : "test_create_topic1" }
  4. ]、
  5. 「バージョン」 : 1
  6. }

次に、次のスクリプトを実行します。--broker-list "0,1,2,3" はブローカーに割り当てるパラメーターです。

  1. sh bin/kafka-reassign-partitions.sh --zookeeper xxx:2181 --topics-to-move-json-file config/move-json-file.json --broker-list "0,1,2,3" --generate  

実行後、次のように印刷されます。

  1. 現在のパーティションのレプリカの割り当て//現在のレプリカの割り当て方法
  2. { "バージョン" :1、 "パーティション" :[{ "トピック" : "test_create_topic1" "パーティション" :2、 "レプリカ" :[1]、 "log_dirs" :[ "任意" ]}、{ "トピック" : "test_create_topic1" "パーティション" :1、 "レプリカ" :[3]、 "log_dirs" :[ "任意" ]}、{ "トピック" : "test_create_topic1" "パーティション" :0、 "レプリカ" :[2]、 "log_dirs" :[ "任意" ]}]}
  3.  
  4. 提案されたパーティション再割り当て構成//予想される再配分方法
  5. { "バージョン" :1、 "パーティション" :[{ "トピック" : "test_create_topic1" "パーティション" :2、 "レプリカ" :[2]、 "log_dirs" :[ "任意" ]}、{ "トピック" : "test_create_topic1" "パーティション" :1、 "レプリカ" :[1]、 "log_dirs" :[ "任意" ]}、{ "トピック" : "test_create_topic1" "パーティション" :0、 "レプリカ" :[0]、 "log_dirs" :[ "任意" ]}]}

パーティションの移動はまだ開始されておらず、現在の割り当てと提案が通知されるだけであることに注意してください。元に戻したい場合に備えて、現在の割り当てを保存します

1.2. Jsonファイルを実行する

キーパラメータ --execute 上記で取得した予想される再配布方法ファイルをjsonファイルreassignment-json-file.jsonに保存します。

  1. { "バージョン" :1、 "パーティション" :[{ "トピック" : "test_create_topic1" "パーティション" :2、 "レプリカ" :[2]、 "log_dirs" :[ "任意" ]}、{ "トピック" : "test_create_topic1" "パーティション" :1、 "レプリカ" :[1]、 "log_dirs" :[ "任意" ]}、{ "トピック" : "test_create_topic1" "パーティション" :0、 "レプリカ" :[0]、 "log_dirs" :[ "任意" ]}]}

次に実行する

  1. sh bin/kafka-reassign-partitions.sh --zookeeper xxxxx:2181 --reassignment-json-file config/reassignment-json-file.json --execute  

移行プロセス中は、クラスター上のトラフィックの急増による影響に注意してください。 Kafka はブローカー間のレプリケーション転送にトラフィック制限を提供し、これにより、あるマシンから別のマシンへのレプリカの帯域幅の上限が制限されます。これは、クラスターの再バランス調整、新しいブローカーの起動、ブローカーの追加または削除を行うときに非常に便利です。ユーザーへの影響を確実にするために、これらの集中的なデータ操作を制限するため、たとえば、上記の移行操作にフロー制限オプション(スロットル50000000)を追加します。

  1. > sh bin/kafka-reassign-partitions.sh --zookeeper xxxxx:2181 --reassignment-json-file config/reassignment-json-file.json --execute -- throttle 50000000  

最後に --throttle 50000000 パラメータを追加すると、モバイル パーティションを実行するときに、フローが 50000000 B/s に制限されます。パラメータを追加すると、

  1. スロットル制限が設定され  50000000 B/sまで
  2. パーティション再割り当てが正常に開始されました

移行中にレプリカのクロスパス移行(同じブローカーの複数のパス)を含める場合、このフロー制限対策は有効にならないことに注意してください。同じブローカーの異なるパスの直接移行のフロー制限を制限するフロー制限パラメータ |--replica-alter-log-dirs-throttle を追加する必要があります。

再バランス調整中に制限を変更する場合は、スループットを増やして、より速く完了するようにします。同じreassignment-json-fileでexecuteコマンドを再実行することができます。

1.3.検証

主要なパラメータ --verify このオプションはパーティションの再割り当てのステータスを確認するために使用され、 --throttle トラフィック制限も削除されます。そうしないと、通常のレプリケーション操作のトラフィックも制限される可能性があります。

sh bin/kafka-reassign-partitions.sh --zookeeper xxxx:2181 --reassignment-json-file config/reassignment-json-file.json --verifyImage注: 入力した BrokerId が存在しない場合は、レプリカの操作は失敗しますが、他のレプリカには影響しません。例えば画像では

2. レプリカのスケーリング

Kafka は、パーティションを拡張できる kafka-topic.sh スクリプトとは異なり、レプリカの拡張と縮小をサポートする専用のスクリプトを提供しません。レプリカを拡大したり縮小したりしたい場合は、回りくどい方法でしか実行できません。 kafka-reassign-partitions.sh を使用してレプリカを再割り当てする

2.1 レプリ​​カの拡張

現在の状況は 3 つのパーティションと 1 つのレプリカであると仮定します。可用性を向上させるために、レプリカの数を 2 に増やしたいと考えています。

2.1.1 計算レプリカ割り当て方法

ステップ1.1で--generateを使用して現在の割り当てを取得し、次のjsonを取得します。

  1. {
  2. 「バージョン」 : 1,
  3. 「パーティション」 : [{
  4. 「トピック」 : 「test_create_topic1」
  5. 「パーティション」 : 2,
  6. 「レプリカ」 :[2]、
  7. "log_dirs" : [ "任意" ]
  8. }, {
  9. 「トピック」 : 「test_create_topic1」
  10. 「パーティション」 : 1,
  11. 「レプリカ」 :[1]、
  12. "log_dirs" : [ "任意" ]
  13. }, {
  14. 「トピック」 : 「test_create_topic1」
  15. 「パーティション」 : 0,
  16. 「レプリカ」 : [0],
  17. "log_dirs" : [ "任意" ]
  18. }]
  19. }

すべてのパーティションのレプリカ数を 2 に変更したいので、ブローカーのリストである "replicas": [] の値を変更するだけで済みます。最初のブローカーはリーダーです。そこで、次のように、割り当てルールに従ってjsonファイルを変更します。

  1. {
  2. 「バージョン」 : 1,
  3. 「パーティション」 : [{
  4. 「トピック」 : 「test_create_topic1」
  5. 「パーティション」 : 2,
  6. 「レプリカ」 : [2,0],
  7. "log_dirs" : [ "任意" , "任意" ]
  8. }, {
  9. 「トピック」 : 「test_create_topic1」
  10. 「パーティション」 : 1,
  11. 「レプリカ」 : [1,2],
  12. "log_dirs" : [ "任意" , "任意" ]
  13. }, {
  14. 「トピック」 : 「test_create_topic1」
  15. 「パーティション」 : 0,
  16. 「レプリカ」 : [0,1],
  17. "log_dirs" : [ "任意" , "任意" ]
  18. }]
  19. }

log_dirs の数はレプリカの数と一致する必要があることに注意してください。または、単に log_dirs オプションを削除します。このlog_dirsは、レプリカがパス間で移行される場合の絶対パスです。

2.1.2 実行

再バランス調整中に制限を変更する場合は、スループットを増やして、より速く完了するようにします。同じ reassignment-json-file を使用して実行コマンドを再実行できます。

2.1.2 検証

絵が完成すると、コピーの数が増えます。

2.2 レプリカのスケーリング

レプリカのスケーリングはスケールアップと同じです。割り当てられたレプリカの数が以前の数より少ない場合、余分なレプリカは削除されます。たとえば、レプリカを追加したばかりで、それをレプリカに復元したいとします。

次のjsonファイルを実行します

  1. {
  2. 「バージョン」 : 1,
  3. 「パーティション」 : [{
  4. 「トピック」 : 「test_create_topic1」
  5. 「パーティション」 : 2,
  6. 「レプリカ」 :[2]、
  7. "log_dirs" : [ "任意" ]
  8. }, {
  9. 「トピック」 : 「test_create_topic1」
  10. 「パーティション」 : 1,
  11. 「レプリカ」 :[1]、
  12. "log_dirs" : [ "任意" ]
  13. }, {
  14. 「トピック」 : 「test_create_topic1」
  15. 「パーティション」 : 0,
  16. 「レプリカ」 : [0],
  17. "log_dirs" : [ "任意" ]
  18. }]
  19. }

実行後、他のコピーが削除対象としてマークされていることがわかります。しばらくするとクリーンアップされます。

このようにレプリカの拡張と縮小は実現できましたが、負荷分散などレプリカの分散は自分で制御する必要があります。Kafka が自動的に分散を手伝ってくれるよりも断然合理的です。では、合理的に分散された Json ファイルを提供するのに役立つ良い方法はあるでしょうか?追伸:

以前、Kafka ソース コードでトピックを作成するときのパーティションとレプリカの割り当てルールを分析しました。では、このような割り当てプロセスを割り当てる際に、同じルールを使用しても問題ないのではないでしょうか。 --generate は基本的にこのメソッドを呼び出します、AdminUtils.assignReplicasToBrokers(brokerMetadatas, assignment.size, replicas.size)

具体的な実装操作については【Kafkaの思考】最小コスト拡張・縮小レプリカ設計計画を参照

同様の方法を実装するプロジェクトを作成します。面倒な場合は、LogIKM の新しいコピー機能を使用してこれを直接実行できます。 (今後実装予定)

3. パーティションの拡張

Kafka パーティション拡張は kafka-topis.sh スクリプトによって実装されます。縮小とパーティション拡張をサポートしていない場合は、[kafka ソースコード] トピックコマンド alter ソースコード分析 (パーティション拡張) を参照してください。

4. パーティションの移行

パーティションの移行は上記と同じです。1.1、1.2、1.3 を参照してください。

5. レプリカのクロスパス移行

オンライン Kafka マシンの各ディスクの占有率が不均一で、一方的になることが多いのはなぜですか?これは、Kafka は各ディスク上のパーティション数が均等に分散されていることを保証するだけで、各パーティションが実際に占有するスペースを把握できないためです。したがって、一部のパーティション内のメッセージ数が膨大になり、大量のディスク領域が占有される可能性が非常に高くなります。バージョン 1.1 より前では、Kafka は異なるブローカー間でのパーティション化されたデータの再配布のみをサポートしており、同じブローカー上の異なるディスク間でのデータの再配布はできなかったため、ユーザーにはこの問題を解決する方法がありませんでした。バージョン1.1では、異なるパス間でのレプリカの移行が正式にサポートされています。

複数のパスを使用してブローカーにパーティションを保存するにはどうすればよいですか?

複数のフォルダーを構成に接続するだけです。

  1. ############################# ログの基本 ############################
  2.  
  3. #ログファイルを保存するディレクトリカンマ区切りリスト
  4. log.dirs=kafka-logs-5,kafka-logs-6,kafka-logs-7,kafka-logs-8

同じブローカー上の異なるパスには異なるパーティションのみが格納され、レプリカは同じブローカーには格納されないことに注意してください。そうしないとレプリカは無意味になります(災害復旧)

クロスパス移行にはどのように対処しますか?

移行 json ファイルには log_dirs というパラメーターがあります。デフォルトのリクエストが通過しない場合は、"log_dirs": ["any"] です (この配列の数はコピーと一致している必要があります) ただし、パス間の移行を実現する場合は、次のように絶対パスを入力するだけで済みます。

移行jsonファイルの例

  1. {
  2. 「バージョン」 : 1,
  3. 「パーティション」 : [{
  4. 「トピック」 : 「test_create_topic4」
  5. 「パーティション」 : 2,
  6. 「レプリカ」 : [0],
  7. "log_dirs" : [ "/Users/xxxxx/work/IdeaPj/source/kafka/kafka-logs-5" ]
  8. }, {
  9. 「トピック」 : 「test_create_topic4」
  10. 「パーティション」 : 1,
  11. 「レプリカ」 : [0],
  12. "log_dirs" : [ "/Users/xxxxx/work/IdeaPj/source/kafka/kafka-logs-6" ]
  13. }]
  14. }

次にスクリプトを実行します

  1. sh bin/kafka-reassign-partitions.sh --zookeeper xxxxx --reassignment-json-file config/reassignment-json-file.json --execute --bootstrap-server  
  2. xxxxx:9092 --レプリカ-変更-ログ-ディレクトリ-スロットル 10000  

注意: パス間で移行する場合は、--bootstrap-server を渡す必要があります。

フローを制限する必要がある場合は、パラメータ |--replica-alter-log-dirs-throttle; を追加します。 --throttle とは異なり、--replica-alter-log-dirs-throttle は Broker 内の異なるパスの移行フローを制限します。

ソースコード分析

ソースコード分析については、[kafka ソースコード] ReassignPartitionsCommand ソースコード分析 (レプリカの拡張と縮小、データ移行、パーティションの再配分、レプリカのクロスパス移行) の記事を参照してください。

ビデオリンク: https://mp.weixin.qq.com/s/fQ03wpctV1dGnmk1r-xEWA

この記事はWeChat公式アカウント「Shi Zhenzhen's Grocery Store」から転載したものです。下のQRコードからフォローできます。記事を転載する場合は、石真珍食料品店の公式アカウントまでご連絡ください。

<<:  Kafka メッセージ送信スレッドとネットワーク通信

>>:  Alibaba第2回インタビュー:Redis分散ロックの有効期限が切れたが、業務が完了していない場合はどうすればよいですか?

推薦する

外部リンクが多いのにウェブサイトがランク付けされない理由を分析しましたか?

SEO 最適化に関して言えば、内部の最適化に加えて、外部リンクも非常に重要です。しかし、多くのウェブ...

ウィキペディアは猿の自撮り写真の削除を拒否、著作権は猿にあると主張

ハフィントンポストの最近のレポートによると、著作権のために戦うのは実は非常に退屈なことだそうだ。しか...

Baidu の 2012 年アルゴリズム アップデートに関する考察

検索エンジン業界には、平均して 3 年ごとにアルゴリズムが変更されるというルールがあります。つまり、...

推奨: tmzvps、高品質の VPS 販売業者、明らかなネットワーク最適化、優れたアフターサービス

海外で非常に評判の良いtmzvpsを紹介します。価格が比較的高いため、多くの中国人はそれに触れたこと...

A5 SEO診断チームがオンライン価格マーケティング手法について語る

オンラインで多くの時間を費やした後、私たちは共通の現象を発見しました。それは、ほとんどの商品のオンラ...

インターネット上で最も危険な脆弱性であるHeartbleedバグに直面して、知っておくべきセキュリティ問題

昨日、Heartbleed 脆弱性に関するニュースがインターネット上で白熱した議論を巻き起こしました...

ハイブリッドクラウドを導入することで、企業がデジタルトランスフォーメーションの失敗から身を守る方法

[[228673]]ファストフードチェーンの閉店であろうと、有名な小売店の倒産であろうと、人々はそれ...

AWSが英国内務省と4億5000万ポンドのクラウドコンピューティング契約を締結、詳細が明らかに

自由民主党のティモシー・クレメント・ジョーンズ議員が提出した書面による質問に対し、内務省次官のシャー...

Redis分散ロックの8つの落とし穴について話す

[[425706]]序文分散システムでは、Redis 分散ロックは比較的シンプルで効率的であり、多く...

クラウドコンピューティングは業界の緊急のニーズであり、中国の新しいインフラストラクチャの重要な技術です。

1. 中国のクラウドコンピューティングの先駆者クラウド コンピューティングについて語るとき、まずクラ...

Witkeyウェブサイトの開発ジレンマと展望の詳細な説明

Witkeyウェブサイトについてお話しすると、皆さんもよくご存知でしょう。特に大学生は、このタイプの...

エッジテクノロジーが将来の技術投資計画の中心となる

現在、企業組織は 5G とエッジ テクノロジーを活用して、従業員の生産性を高め、既存の製品やサービス...

ソフトな記事を使ってネットワークマーケティングの高速道路に導きます

インターネット マーケティングは、低コスト、高効率、優れた結果が特徴です。インターネット マーケティ...

Baiduプロモーションが更新され、「プロモーション」から「Baiduプロモーション」にアップグレードされました

Baiduプロモーションが更新され、「プロモーション」から「Baiduプロモーション」にアップグレー...

デスクトップ仮想化: 3つの主要プレーヤー、どれが勝つか見てみましょう

データ センター環境では、仮想マシンはさまざまなアプリケーションのさまざまなニーズを満たす最適なソリ...