Kafka 주제의 복제본 수를 변경하는 방법은 무엇입니까?
생산자 또는 관리자가 Kafka 주제를 만든 후이 주제의 복제본 수를 어떻게 변경 하시겠습니까?
편집 : 내가 틀렸다는 것이 입증되었습니다 -Łukasz Dumiszewski의 훌륭한 답변을 확인하십시오 .
나는 완성을 위해 원래의 대답을 남겨두고 있습니다.
나는 당신이 할 수 있다고 생각하지 않습니다. 일반적으로 다음과 같습니다.
./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-1543
주어진 주제에 대한 복제본 수를 늘리려면 다음을 수행해야합니다.
1. 사용자 지정 재 할당 json 파일에 추가 복제본 지정
예를 들어, increment-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]}
]}
2. kafka-reassign-partitions 도구 의 --execute 옵션과 함께 파일을 사용합니다.
[또는 kafka- reassign - partitions.sh -kafka 패키지에 따라 다름]
예를 들면 :
$ kafka-reassign-partitions --zookeeper localhost:2181 --reassignment-json-file increase-replication-factor.json --execute
3. kafka-topics 도구로 복제 요소를 확인합니다.
[또는 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
참조 : 복제 계수를 늘리는 방법을 설명하는 공식 문서의 일부 .
Łukasz Dumiszewski의 대답 은 정확하지만 해당 파일을 수동으로 생성하는 것은 약간 어렵습니다. 운 좋게도 @ Łukasz Dumiszewski가 말한 것을 달성하는 몇 가지 쉬운 방법이 있습니다.
kafka-manager
tool 을 사용하는 경우 버전 에서 주제보기의 섹션에서2.0.0.2
복제 계수를 변경할 수 있습니다Generate Partition Assignment
. 그런 다음를 클릭Reassign Partitions
하여 생성 된 파티션 할당을 적용 해야 합니다 (다른 복제 요소를 선택하면 경고가 표시되지만Force Reassign
나중에 클릭 할 수 있음 ).루비가 설치되어 있다면이 도우미 스크립트를 사용할 수 있습니다.
- nodejs를 선호한다면 이 요점으로 파일을 생성 할 수도 있습니다.
파티션이 많은 경우 kafka-reassign-partitions
Łukasz Dumiszewski의 답변 (및 공식 문서)에 필요한 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
주어진 주제에 대한 복제본 수를 늘리려면 다음을 수행해야합니다.
1. 아래 명령을 사용하여 기존 주제에 추가 파티션을 지정합니다 (2에서 3으로 증가).
bin/kafktopics.sh --zookeeper localhost:2181 --alter --topic topic-to-increase --partitions 3
2. 사용자 지정 재 할당 json 파일에 추가 복제본 지정
For example, you could create increase-replication-factor.json and put this content in it:
{"version":1,
"partitions":[
{"topic":"topic-to-increase","partition":0,"replicas":[0,1,2]},
{"topic":"topic-to-increase","partition":1,"replicas":[0,1,2]},
{"topic":"topic-to-increase","partition":2,"replicas":[0,1,2]}
]}
3. Use the file with the --execute option of the kafka-reassign-partitions tool
bin/kafka-reassign-partitions --zookeeper localhost:2181 --reassignment-json-file increase-replication-factor.json --execute
4. Verify the replication factor with the kafka-topics tool
bin/kafka-topics --zookeeper localhost:2181 --topic topic-to-increase --describe
ReferenceURL : https://stackoverflow.com/questions/37960767/how-to-change-the-number-of-replicas-of-a-kafka-topic
'programing' 카테고리의 다른 글
Images.xcassets에서 이미지를 현지화하는 방법은 무엇입니까? (0) | 2021.01.18 |
---|---|
React JSX : 해시를 통해 반복하고 각 키에 대한 JSX 요소 반환 (0) | 2021.01.18 |
.net 개체의 크기 확인 (0) | 2021.01.18 |
동영상 재생을위한 Android 의도? (0) | 2021.01.18 |
emacs lisp, 버퍼 메이저 모드를 얻는 방법? (0) | 2021.01.18 |