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 변경