programing

Kafka 주제의 복제본 수를 변경하는 방법은 무엇입니까?

shortcode 2021. 1. 18. 08:24
반응형

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

반응형