kafka cluster replica partition reassignment
web/kafka

kafka cluster replica partition reassignment

반응형

kafka replica

kafka는 내장애성을 위해 복제본을 만든다고 한다. 그래서 안정적인 고가용성을 유지하기 위해 일정 수준의 replica partition이 살아있지 않은 경우 ISR(In-Sync Replica)이 복구 될 때까지 데이터를 쓸 수가 없는 상태가 된다.

 

만약 replica partition이 있는 broker가 down 될 경우에 새로운 broker를 클러스터에 추가하게 되면 broker와 함께 죽어버린 replica partition이 자동으로 assign 되면서 생성될까? 확인 결과 그렇지 않다고 한다. 하둡이나 ES처럼 자동으로 새로운 노드, broker가 붙는다고 해서 auto assign을 하지 않는다고 한다. (엄청 불편하군)

 

그럼 실제로 broker가 죽었다고 생각하고 replica partition을 재배치 하는 과정을 테스트해보자.

 

 


테스트

[토픽 생성]

그럼 기존에 3대의 partition과 3개의 replica factor, min.insync.replica=2로 구성된 wedulman이라는 topic을 생성해보자.

[root@e492ba70191d /]# kafka-topics --zookeeper centos1:2181,centos2:2181,centos3:2181 --create --topic wedulman --config 'min.insync.replicas=2' --partitions 3 --replication-factor 3
Created topic "wedulman".
[root@e492ba70191d /]# kafka-topics --zookeeper centos1:2181,centos2:2181,centos3:2181 --describe --topic wedulman
Topic:wedulman	PartitionCount:3	ReplicationFactor:3	Configs:min.insync.replicas=2
	Topic: wedulman	Partition: 0	Leader: 1	Replicas: 1,2,3	Isr: 1,2,3
	Topic: wedulman	Partition: 1	Leader: 2	Replicas: 2,3,1	Isr: 2,3,1
	Topic: wedulman	Partition: 2	Leader: 3	Replicas: 3,1,2	Isr: 3,1,2

 

 

[broker 2 제거]

그럼 이상태에서 broker2 서버를 꺼보자.

그 다음 wedulman의 토픽 정보를 확인해보면 ISR에서 broker 2가 빠진것을 볼 수 있다.

[root@e492ba70191d /]# kafka-topics --zookeeper centos1:2181,centos2:2181,centos3:2181 --describe --topic wedulman
Topic:wedulman	PartitionCount:3	ReplicationFactor:3	Configs:min.insync.replicas=2
	Topic: wedulman	Partition: 0	Leader: 1	Replicas: 1,2,3	Isr: 1,3
	Topic: wedulman	Partition: 1	Leader: 3	Replicas: 2,3,1	Isr: 3,1
	Topic: wedulman	Partition: 2	Leader: 3	Replicas: 3,1,2	Isr: 3,1

 

 

[broker 4 추가]

그 다음 borker 4 서버를 실행 시킨 뒤 zookeeper와 kafka를 실행시켜보자.

 

 

[reassignment partition]

우선 reassignment를 하기 위해 현재 파티션을 어떻게 재 배치 할 건지에 대한 내용을 reassignment.json 파일에 작성한다. 나는 레플리카 broker 2를 제거하고 4를 넣을 것이기에 아래처럼 작성했다.

{
  "version": 1,
  "partitions": [
    {"topic": "wedulman", "partition": 0, "replicas": [1,2,4]},
    {"topic": "wedulman", "partition": 1, "replicas": [2,4,1]},
    {"topic": "wedulman", "partition": 2, "replicas": [4,1,2]}
  ]
}

- version은 파티션 재배치의 배치 정보 표기법의 버전을 나타낸다.

- partitions에 재배치 하고 싶은 파티션 정보를 기재한다.

 

 

그럼 kafka-reassignment-partitions 명령어를 통해 생성한 reassignment.json 내용을 토대로 재배치를 실행시켜보자.

# 실행 명령어
[root@e492ba70191d /]# kafka-reassign-partitions --zookeeper centos1:2181,centos2:2181,centos4:2181 --reassignment-json-file ./reassignment.json --execute
Current partition replica assignment

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

Save this to use as the --reassignment-json-file option during rollback
Successfully started reassignment of partitions.

 

 

 

 

 

성공적으로 파티션 재할당을 실행했다는 내용을 확인했고 실제로 잘 할당되고 있는지 verify 옵션을 붙여서 확인해봤다.

[root@e492ba70191d /]# kafka-reassign-partitions --zookeeper centos1:2181,centos2:2181,centos4:2181 --reassignment-json-file ./reassignment.json --verify
Status of partition reassignment:
Reassignment of partition wedulman-0 completed successfully
Reassignment of partition wedulman-1 completed successfully
Reassignment of partition wedulman-2 completed successfully

로그상으로는 모든 파티션이 정상적으로 재할당 되었다는 걸 확인했다.

 

 

그럼 실제로 해당 토픽의 정보를 확인해서 정말 의도한대로 재할당이 되었고 ISR에서 broker2가 빠지고 broker4가 들어왔는지 확인해보자.

[root@e492ba70191d /]# kafka-topics --zookeeper centos1:2181,centos2:2181,centos4:2181 --describe --topic wedulman
Topic:wedulman	PartitionCount:3	ReplicationFactor:3	Configs:min.insync.replicas=2
	Topic: wedulman	Partition: 0	Leader: 3	Replicas: 1,3,4	Isr: 3,1,4
	Topic: wedulman	Partition: 1	Leader: 3	Replicas: 3,4,1	Isr: 3,1,4
	Topic: wedulman	Partition: 2	Leader: 3	Replicas: 4,1,3	Isr: 3,1,4

정상적으로 잘 되었다. 아직 카프카가 익숙치 않아서 그럴 수 있지만 실제로 이렇게 다 cli에서 작업을 하는지 아니면 별도의 또 편리한 gui 툴이 있는지는 모르겠다.

 

그래도 의도한대로 replica partition을 reassignment 해볼 수 있어 좋았다. 끗

반응형