プロデューサーまたは管理者がKafkaトピックを作成した後、このトピックのレプリカの数をどのように変更しますか?
編集:私は間違っていることが証明されました-確認してください ŁukaszDumiszewskiからの優れた答え。
私は今のところ、完全さのために私の元の答えを残しています。
できるとは思わない。通常は次のようになります
./kafka-topics.sh --zookeeper localhost:2181 --alter --topic test2 --replication-factor 3
しかし、それは言います
オプション「[replication-factor]」は、オプション「[alter]」と一緒に使用できません
パーティションの数をオンザフライで変更できるのは面白いことです(実行時に行われると非常に破壊的なアクションになることが多い)が、レプリケーション係数を増やすことはできません。ただし、10.0ではなく0.10であることを忘れないでください。拡張リクエストについてはこちらをご覧ください https://issues.Apache.org/jira/browse/KAFKA-154
特定のトピックのレプリカの数を増やすには、以下を行う必要があります。
たとえば、increase-replication-factor.jsonを作成し、このコンテンツをその中に入れることができます。
{"version":1,
"partitions":[
{"topic":"signals","partition":0,"replicas":[0,1,2]},
{"topic":"signals","partition":1,"replicas":[0,1,2]},
{"topic":"signals","partition":2,"replicas":[0,1,2]}
]}
[またはkafka-reassign-partitions.sh-kafkaパッケージに応じて]
例えば:
$ kafka-reassign-partitions --zookeeper localhost:2181 --reassignment-json-file increase-replication-factor.json --execute
[またはkafka-topics.sh-kafkaパッケージに応じて]
$ kafka-topics --zookeeper localhost:2181 --topic signals --describe
Topic:signals PartitionCount:3 ReplicationFactor:3 Configs:retention.ms=1000000000
Topic: signals Partition: 0 Leader: 2 Replicas: 0,1,2 Isr: 2,0,1
Topic: signals Partition: 1 Leader: 2 Replicas: 0,1,2 Isr: 2,0,1
Topic: signals Partition: 2 Leader: 2 Replicas: 0,1,2 Isr: 2,0,1
ŁukaszDumiszewskiの answer は正しいですが、そのファイルを手動で生成するのは少し難しいです。幸いなことに、@ŁukaszDumiszewskiが言ったことを達成するためのいくつかのeasy方法があります。
パーティションがたくさんある場合、kafka-reassign-partitions
を使用してŁukaszDumiszewskiの回答(および公式ドキュメント)で必要なjsonファイルを生成すると、時間を節約できます。すべてのパーティションを指定せずに1〜2台のサーバーから64パーティショントピックを複製する例を次に示します。
expand_topic=TestTopic
current_server=111
new_servers=111,222
echo '{"topics": [{"topic":"'${expand_topic}'"}], "version":1}' > /tmp/topics-to-expand.json
/bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --topics-to-move-json-file /tmp/topics-to-expand.json --broker-list "${current_server}" --generate | tail -1 | sed s/\\[${current_server}\\]/\[${new_servers}\]/g | tee /tmp/topic-expand-plan.json
/bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file /tmp/topic-expand-plan.json --execute
/bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic ${expand_topic}
出力:
Topic:TestTopic PartitionCount:64 ReplicationFactor:2 Configs:retention.ms=6048000
Topic: TestTopic Partition: 0 Leader: 111 Replicas: 111,222 Isr: 111,222
Topic: TestTopic Partition: 1 Leader: 111 Replicas: 111,222 Isr: 111,222
....
このスクリプトは、すべてのトピックのレプリケーション係数を変更する場合に役立ちます。
#!/bin/bash
topics=`kafka-topics --list --zookeeper zookeeper:2181`
while read -r line; do lines+=("$line"); done <<<"$topics"
echo '{"version":1,
"partitions":[' > tmp.json
for t in $topics; do
if [ "${t}" == "${lines[-1]}" ]; then
echo " {\"topic\":\"${t}\",\"partition\":0,\"replicas\":[0,1,2]}" >> tmp.json
else
echo " {\"topic\":\"${t}\",\"partition\":0,\"replicas\":[0,1,2]}," >> tmp.json
fi
done
echo ' ]
}' >> tmp.json
kafka-reassign-partitions --zookeeper zookeeper:2181 --reassignment-json-file tmp.json --execute