Infra/Kafka, MQTT

[Kafka] 이미 생성된 토픽의 replication factor 변경하기

Nellie Kim 2024. 5. 27. 14:51
728x90

목차

 

원래는 토픽 생성 시에 설정 값으로 준다

replication-factor를 설정하는 것은 토픽.sh에서 토픽을 생성할 때 설정 값으로 주는 것이다. 아래처럼….

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

 

RF를 변경해보자

그런데 나는 replication factor를 3으로 변경하고 싶었다. 브로커가 3이기 때문에!

일단 토픽을 describe 명령어를 써서 상세 조회 해보자.

 

1. RF 상세 조회로 현재 RF 값 확인

kafka-topics.sh --bootstrap-server kafka1:9092 --topic directTest --describe --command-config /opt/bitnami/kafka/config/sasl_client.properties
Topic: directTest       TopicId: ve1NQTn4SNCf-lV-qVwDqA PartitionCount: 3       **ReplicationFactor: 1**    Configs:
        Topic: directTest       Partition: 0    Leader: 3       Replicas: 3     Isr: 3
        Topic: directTest       Partition: 1    Leader: 1       Replicas: 1     Isr: 1
        Topic: directTest       Partition: 2    Leader: 2       Replicas: 2     Isr: 2

 

보니까 이렇게 ReplicationFactor : 1이라고 나와있다.

 

 

🔽 gpt 가 알려준 위 정보의 의미이다.

더보기

전체 토픽 정보

  • Topic: directTest - 토픽의 이름입니다.
  • TopicId: ve1NQTn4SNCf-lV-qVwDqA - 토픽의 고유 ID입니다.
  • PartitionCount: 3 - 토픽에 포함된 파티션의 수입니다.
  • ReplicationFactor: 1 - 각 파티션의 리플리카 수입니다. 이 경우, 각 파티션은 단 하나의 리플리카를 가집니다.
  • Configs: - 현재 설정된 특별한 설정이 없습니다.

각 파티션 정보

각 파티션의 정보를 제공합니다:

Partition 0

  • Partition: 0 - 파티션 번호입니다.
  • Leader: 3 - 파티션 0의 리더 브로커 ID입니다. 리더는 클라이언트의 모든 읽기 및 쓰기 요청을 처리합니다.
  • Replicas: 3 - 파티션 0의 리플리카를 호스팅하는 브로커 ID입니다. 이 경우, 브로커 3만 리플리카를 가집니다.
  • Isr: 3 - 현재 "In-Sync Replicas" (ISR)에 있는 리플리카의 브로커 ID입니다. 이들은 리더와 동기화 상태에 있는 리플리카입니다.

Partition 1

  • Partition: 1 - 파티션 번호입니다.
  • Leader: 1 - 파티션 1의 리더 브로커 ID입니다.
  • Replicas: 1 - 파티션 1의 리플리카를 호스팅하는 브로커 ID입니다. 이 경우, 브로커 1만 리플리카를 가집니다.
  • Isr: 1 - 현재 "In-Sync Replicas" (ISR)에 있는 리플리카의 브로커 ID입니다.

Partition 2

  • Partition: 2 - 파티션 번호입니다.
  • Leader: 2 - 파티션 2의 리더 브로커 ID입니다.
  • Replicas: 2 - 파티션 2의 리플리카를 호스팅하는 브로커 ID입니다. 이 경우, 브로커 2만 리플리카를 가집니다.
  • Isr: 2 - 현재 "In-Sync Replicas" (ISR)에 있는 리플리카의 브로커 ID입니다.

요약

  • directTest 토픽은 3개의 파티션을 가지고 있으며, 각 파티션은 리플리카 수가 1로 설정되어 있습니다.
  • 각 파티션은 서로 다른 브로커가 리더 역할을 하고 있으며, 해당 브로커는 유일한 리플리카이자 In-Sync Replica입니다.
  • 리플리케이션 팩터가 1이기 때문에 데이터 복제는 이루어지지 않고, 각 파티션은 하나의 브로커에만 존재합니다.

이 정보는 directTest 토픽이 현재 3개의 브로커에 분산되어 있으며, 각 파티션의 리더와 ISR 상태를 보여줍니다.

 

 

2. json 파일 생성하기

/opt/bitnami/kafka/bin 
vim rf.json #rf.json 이라고 작성함

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

 

3. kafka-reassign-partitions.sh 으로 RF 값 늘리기

kafka-reassign-partitions.sh \\
    --bootstrap-server kafka1:9092 \\
    --reassignment-json-file rf.json \\
    --command-config /opt/bitnami/kafka/config/sasl_client.properties \\
    --execute

 

다시 아래 명령어로 토픽 상세조회를 해보니, ReplicationFactor : 3 으로 변경된 것을 확인할 수 있다!

kafka-topics.sh --bootstrap-server kafka1:9092 --topic directTest --describe --command-config /opt/bitnami/kafka/config/sasl_client.properties

 

 

출처

 

[Kafka] 토픽의 Replication Factor 변경

 

[Kafka] 토픽의 Replication Factor 변경

카프카 토픽에 전송된 메시지는 가용성을 위해서 여러 브로커에 복제되어 저장된다. 브로커 노드에 장애가 생긴 상황에서도 메시지 서비스가 가능하도록 하기 위함이다. 카프카는 이렇게 복제

hbase.tistory.com