kafkaを使用してtopicのバックアップ数を増やし、ビジネスをさらに向上させる方法


この記事はクラウド+コミュニティから発表されました

一、困難点


topicを作成する場合は、パラメータであるreplication-factorを指定してバックアップ数を設定できます.しかし、topicの確立が完了すると、kafka-topicを通過することはできない.shまたはコマンドはreplica数を変更します.

二、解決方法


実際、kafka-reassign-partitionsを利用することができる「別の方法」を考えることができます.shコマンドは、すべてのパーティションを再分布し、パーティションを再分布するときに、各パーティションのreplicaバックアップ数を増やすことで目的を達成します.
ここではkafka-reassign-partitionsの利用方法について説明する.shコマンドはtopicのバックアップ数を増やします.
注意:以下のコマンドで使用するtopic名、zookeeperのipとportは、実際のクラスタのパラメータに置き換える必要があります.
(kafkaクラスタに4つのbrokerがあると仮定し、idはそれぞれ:1001100210031004)

2.1、現在のtopicのすべてのパーティションがbrokerに分布している場合を取得する

[root@tbds bin]# ./kafka-topics.sh --zookeeper 172.16.32.13:2181 --topic ranger_audits --describe
Topic:ranger_audits     PartitionCount:10       ReplicationFactor:1     Configs:
        Topic: ranger_audits    Partition: 0    Leader: 1001    Replicas: 1001  Isr: 1001
        Topic: ranger_audits    Partition: 1    Leader: 1002    Replicas: 1002  Isr: 1002
        Topic: ranger_audits    Partition: 2    Leader: 1001    Replicas: 1001  Isr: 1001
        Topic: ranger_audits    Partition: 3    Leader: 1002    Replicas: 1002  Isr: 1002
        Topic: ranger_audits    Partition: 4    Leader: 1001    Replicas: 1001  Isr: 1001
        Topic: ranger_audits    Partition: 5    Leader: 1002    Replicas: 1002  Isr: 1002
        Topic: ranger_audits    Partition: 6    Leader: 1001    Replicas: 1001  Isr: 1001
        Topic: ranger_audits    Partition: 7    Leader: 1002    Replicas: 1002  Isr: 1002
        Topic: ranger_audits    Partition: 8    Leader: 1001    Replicas: 1001  Isr: 1001
        Topic: ranger_audits    Partition: 9    Leader: 1002    Replicas: 1002  Isr: 1002

ranger_auditsというtopicには10のパーティションがあり、各パーティションにはfeplicaバックアップが1つしかなく、1001と1002の2台のbrokerの上に分布しています.
次はranger_auditsの各パーティションデータは2つのreplicaバックアップに追加され、4つのbrokerに分散されます.

2.2.replicaバックアップ数を増やすプロファイルの作成


(注:topicの既存の各パーティションのプライマリ・バックアップは変更されません.したがって、プロファイルの各パーティションの最初のbrokerは変更されません.)
[root@tbds bin]# vim ../config/increase-replication-factor.json
{"version":1,
"partitions":[
{"topic":"ranger_audits","partition":0,"replicas":[1001,1003]},
{"topic":"ranger_audits","partition":1,"replicas":[1002,1004]},
{"topic":"ranger_audits","partition":2,"replicas":[1001,1003]},
{"topic":"ranger_audits","partition":3,"replicas":[1002,1004]},
{"topic":"ranger_audits","partition":4,"replicas":[1001,1003]},
{"topic":"ranger_audits","partition":5,"replicas":[1002,1004]},
{"topic":"ranger_audits","partition":6,"replicas":[1001,1003]},
{"topic":"ranger_audits","partition":7,"replicas":[1002,1004]},
{"topic":"ranger_audits","partition":8,"replicas":[1001,1003]},
{"topic":"ranger_audits","partition":9,"replicas":[1002,1004]}
]}

上記のプロファイルでは、topicの各パーティションに1つのreplicaを追加し、各パーティションの元のプライマリバックアップが存在するbrokerを変更せずに、各パーティションに追加されたreplicaバックアップデータを1003と1004の2つのbrokerに配置します.

2.3、追加パーティションの実行開始

[root@tbds bin]# ./kafka-reassign-partitions.sh -zookeeper 172.16.32.13:2181 --reassignment-json-file ../config/increase-replication-factor.json --execute
Current partition replica assignment
{"version":1,"partitions":[{"topic":"ranger_audits","partition":3,"replicas":[1002]},{"topic":"ranger_audits","partition":9,"replicas":[1002]},{"topic":"ranger_audits","partition":8,"replicas":[1001]},{"topic":"ranger_audits","partition":1,"replicas":[1002]},{"topic":"ranger_audits","partition":4,"replicas":[1001]},{"topic":"ranger_audits","partition":2,"replicas":[1001]},{"topic":"ranger_audits","partition":5,"replicas":[1002]},{"topic":"ranger_audits","partition":0,"replicas":[1001]},{"topic":"ranger_audits","partition":6,"replicas":[1001]},{"topic":"ranger_audits","partition":7,"replicas":[1002]}]}

Save this to use as the --reassignment-json-file option during rollback
Successfully started reassignment of partitions 
{"version":1,"partitions":[{"topic":"ranger_audits","partition":0,"replicas":[1001,1003]},{"topic":"ranger_audits","partition":8,"replicas":[1001,1003]},{"topic":"ranger_audits","partition":5,"replicas":[1002,1004]},{"topic":"ranger_audits","partition":2,"replicas":[1001,1003]},{"topic":"ranger_audits","partition":9,"replicas":[1002,1004]},{"topic":"ranger_audits","partition":1,"replicas":[1002,1004]},{"topic":"ranger_audits","partition":3,"replicas":[1002,1004]},{"topic":"ranger_audits","partition":4,"replicas":[1001,1003]},{"topic":"ranger_audits","partition":7,"replicas":[1002,1004]},{"topic":"ranger_audits","partition":6,"replicas":[1001,1003]}]}

2.4、実行進捗の表示

[root@tbds bin]# ./kafka-reassign-partitions.sh -zookeeper 172.16.32.13:2181 --reassignment-json-file ../config/increase-replication-factor.json --verify
Status of partition reassignment:
Reassignment of partition [ranger_audits,0] completed successfully
Reassignment of partition [ranger_audits,8] completed successfully
Reassignment of partition [ranger_audits,5] completed successfully
Reassignment of partition [ranger_audits,2] completed successfully
Reassignment of partition [ranger_audits,9] completed successfully
Reassignment of partition [ranger_audits,1] completed successfully
Reassignment of partition [ranger_audits,3] completed successfully
Reassignment of partition [ranger_audits,4] completed successfully
Reassignment of partition [ranger_audits,7] completed successfully
Reassignment of partition [ranger_audits,6] completed successfully

パーティションの追加に成功しました

2.5、再度topicの状況を確認する

[root@tbds bin]# ./kafka-topics.sh --zookeeper 172.16.32.13:2181 --topic ranger_audits --describe
Topic:ranger_audits     PartitionCount:10       ReplicationFactor:2     Configs:
        Topic: ranger_audits    Partition: 0    Leader: 1001    Replicas: 1001,1003     Isr: 1001,1003
        Topic: ranger_audits    Partition: 1    Leader: 1002    Replicas: 1002,1004     Isr: 1002,1004
        Topic: ranger_audits    Partition: 2    Leader: 1001    Replicas: 1001,1003     Isr: 1001,1003
        Topic: ranger_audits    Partition: 3    Leader: 1002    Replicas: 1002,1004     Isr: 1002,1004
        Topic: ranger_audits    Partition: 4    Leader: 1001    Replicas: 1001,1003     Isr: 1001,1003
        Topic: ranger_audits    Partition: 5    Leader: 1002    Replicas: 1002,1004     Isr: 1002,1004
        Topic: ranger_audits    Partition: 6    Leader: 1001    Replicas: 1001,1003     Isr: 1001,1003
        Topic: ranger_audits    Partition: 7    Leader: 1002    Replicas: 1002,1004     Isr: 1002,1004
        Topic: ranger_audits    Partition: 8    Leader: 1001    Replicas: 1001,1003     Isr: 1001,1003
        Topic: ranger_audits    Partition: 9    Leader: 1002    Replicas: 1002,1004     Isr: 1002,1004

バックアップ数の増加に成功したことがわかります

三、さらに考える


上記の方法では、topicのバックアップ数を増やす以外に、以下のシーンを処理することができます.
1、topicのすべてのパーティションデータを全体的に移行する.どうやって理解しますか?クラスタにN個のbrokerがあれば,その後M個のbrokerを新たに拡張する.新しく拡張されたbrokerディスクはすべて空なので、既存のbrokerディスクの占有量はすべていっぱいです.そこで,上記の手法を用いて,既存のN個のbrokerに格納されたいくつかのtopic全体を新たに拡張されたM個のbrokerに移行し,kafkaクラスタ全体のデータ等化を実現することができる.
具体的には、2.2章のプロファイルを作成し、topicのすべてのパーティションを新しいM個のbrokerの上に配置し、excuteを実行することで、topicのすべてのパーティションデータ全体を新しい拡張M個のbrokerノードに移行することができます.
*2、ブローカーが壊れた場合.*いくつかのtopicのいくつかのパーティションのreplica数の減少を招き、kafka-reassign-partitionsを利用することができる.sh replicaを追加する;
*3、kafka一部のbrokerディスクの占有量がいっぱいで、一部のディスクの占有量が少ない.*kafka-reassign-partitionsを利用できます.shいくつかのtopicのパーティションデータをディスク占有量の少ないbrokerに移行し、データの均衡を実現する.
*4、kafkaクラスタ拡張.*従来のbrokerのtopicデータ全体を新しいbrokerに移行し,新しい拡張brokerを合理的に利用し,負荷均衡を実現する必要がある.
この文章はすでに作者がテンセント雲+コミュニティに各ルートで発表することを授権した.
より多くの新鮮な技術の乾物を獲得して、私達のテンセントの雲の技術のコミュニティに注目することができます-雲加のコミュニティの公式号と知っている機構号