본문 바로가기
Old Posts/Kafka

[Kafka] 토픽의 Replication Factor 변경

by A6K 2021. 10. 21.

카프카 토픽에 전송된 메시지는 가용성을 위해서 여러 브로커에 복제되어 저장된다. 브로커 노드에 장애가 생긴 상황에서도 메시지 서비스가 가능하도록 하기 위함이다. 카프카는 이렇게 복제된 메시지를 Replica라고 부르며 몇 개의 Replica로 복제 할 것인지를 Replication Factor(RF)라고 한다.

수동으로 토픽을 생성할 때 옵션으로 RF 값을 명시할 수 있다.

$ kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 2 --partitions 10 --topic MyTopic

--replication-factor 옵션으로 몇 개의 Replica로 저장할지 지정할 수 있다.

만약 auto.create.topics.enable 옵션이 켜져 있다면 존재하지 않는 토픽으로의 메시지가 도착했을 때 자동으로 토픽이 생성된다. 이 때, 자동으로 생성된 토픽의 RF는 default.replication.factor 로 설정된 값이 사용된다. 이 값의 기본 값은 1이다.

참고로 카프카는 offset 정보를 내부 토픽에 저장하는데 이 토픽의 RF 값은 offsets.topic.replication.factor 설정에 영향을 받는다. 만약 클러스터 사이즈가 이 값보다 작다면 내부 토픽의 생성은 실패하게 된다. 이 설정의 기본 값은 3이다.

카프카 토픽 Replication Factor 변경

RF 값은 카프카 바이너리에 포함되어 있는 kafka-reassign-partitions.sh 스크립트를 이용해서 변경할 수 있다.

우선 RF 값을 변경하려는 토픽의 상태를 조회해보자.

$ kafka-topics.sh --zookeeper localhost:2181 --topic MyTopic --describe
Topic:MyTopic   PartitionCount:2    ReplicationFactor:2 Configs:
  Topic: MyTopic    Partition: 0    Leader: 1   Replicas: 1,2 Isr: 1,2
  Topic: MyTopic    Partition: 1    Leader: 2   Replicas: 2,1 Isr: 1,2

MyTopic이라는 이름의 토픽의 상세 정보를 조회해보면, ReplicationFactor 값이 2로 지정되어 있음을 확인할 수 있다. 이 토픽의 RF 값을 3으로 변경해보자.

카프카 토픽의 RF 값을 변경하기 위해서는 json 형식의 파일 작성이 필요하다.

{
    "version":1,
    "partitions":[
        {
            "topic":"MyTopic",
            "partition":0,
            "replicas":[1,2,3]
        },
        {
            "topic":"MyTopic",
            "partition":1,
            "replicas":[2,1,3]
        }
    ]
}

MyTopic 토픽의 replicas 정보에 새로운 노드인 3번을 추가했다. 이 때, replicas 항목에 나오는 순서가 중요한데 replicas 항목의 맨 처음에 나오는 브로커 노드가 그 파티션의 리더가 된다. 이 파일을 replication-factor.json 으로 저장한다.

kafka-reassign-partitions.sh 스크립트와 방금 생성한 json 파일을 이용해서 RF 값을 늘려준다.

$ kafka-reassign-partitions.sh \
    --zookeeper localhost:2181 \
    --reassignment-json-file replication-factor.json --execute

스크립트의 실행이 완료되면 토픽의 설정이 변경되었는지 다시 확인해본다.

$ kafka-topics.sh --zookeeper localhost:2181 --topic MyTopic --describe
Topic:MyTopic   PartitionCount:2    ReplicationFactor:3 Configs:
  Topic: MyTopic    Partition: 0    Leader: 1   Replicas: 1,2,3 Isr: 1,3,2
  Topic: MyTopic    Partition: 1    Leader: 2   Replicas: 2,1,3 Isr: 1,3,2

RF 값이 3으로 변경된 것을 확인할 수 있다.

댓글