kafka-reassign-partitions는 아래와 같은 경우 사용된다.
- 브로커 간의 리더 불균형을 제어
- 한 브로커에서 다른 브로커로 파티션을 재할당하여 기존 클러스터를 확장
- 동일한 브로커의 로그 디렉토리 간에 파티션을 재할당하여 브로커에서 사용 가능한 디스크 간의 스토리지 로드 불균형을 해결
- 여러 브로커의 로그 디렉토리 간에 파티션을 재할당해 여러 브로커에서 스토리지 로드 불균형을 해결
test topic의 partition은 아래와 같이 분산되어 있다.
# server01
[root@server01 ~]# ll -d /kafka/kafka-logs/t*
drwxr-xr-x. 2 root root 204 Aug 23 07:12 /kafka/kafka-logs/test-2
[root@server01 ~]# ll -d /kafka/kafka-logs2/t*
drwxr-xr-x 2 root root 204 Aug 23 07:12 /kafka/kafka-logs2/test-0
# server02
[root@server01 ~]# ssh server02 "ls -d /kafka/kafka-logs/t*"
/kafka/kafka-logs/test-0
/kafka/kafka-logs/test-1
# server03
[root@server01 ~]# ssh server03 "ls -d /kafka/kafka-logs/t*"
/kafka/kafka-logs/test-1
/kafka/kafka-logs/test-2
test topic을 describe한다.
[root@server01 ~]# kafka-topics.sh --bootstrap-server server01:9092 --topic test --describe
Topic: test TopicId: TCzzJwfHTB-QxTQYJpcIKg PartitionCount: 3 ReplicationFactor: 2 Configs: segment.bytes=1073741824
Topic: test Partition: 0 Leader: 2 Replicas: 1,2 Isr: 2,1
Topic: test Partition: 1 Leader: 2 Replicas: 2,3 Isr: 2,3
Topic: test Partition: 2 Leader: 3 Replicas: 3,1 Isr: 3,1
해석 : Topic: test Partition: 0 Leader: 2 Replicas: 1,2 Isr: 2,1 test-0이 broker1과 broker2에 있다는 의미 |
1. 브로커 간 파티션 재할당
broker에서 broker로 파티션을 재할당 한다.
현재 partition은 아래와 같이 구성되어 있다.
Partition: 0 Replicas: 1,2
Partition: 1 Replicas: 2,3
Partition: 2 Replicas: 3,1
이를 아래와 같은 구조로 파티션을 재할당 한다.
Partition: 0 Replicas: 3,2
Partition: 1 Replicas: 1,3
Partition: 2 Replicas: 2,1
1.1 reassign.json을 작성한다. (file 이름은 기호에 맞게 변경 가능함)
{
"version" : 1,
"partitions" : [
{"topic" : "test", "partition" : 0, "replicas" : [3,2]},
{"topic" : "test", "partition" : 1, "replicas" : [1,3]},
{"topic" : "test", "partition" : 2, "replicas" : [2,1]}
]
}
1.2 reassign-partitions을 적용한다.
[root@server01 ~]# kafka-reassign-partitions.sh --bootstrap-server server01:9092 --reassignment-json-file reassign.json --execute
Current partition replica assignment
{"version":1,"partitions":[{"topic":"test","partition":0,"replicas":[1,2],"log_dirs":["any","any"]},{"topic":"test","partition":1,"replicas":[2,3],"log_dirs":["any","any"]},{"topic":"test","partition":2,"replicas":[3,1],"log_dirs":["any","any"]}]}
Save this to use as the --reassignment-json-file option during rollback
Successfully started partition reassignments for test-0,test-1,test-2
1.3 진행상황을 확인한다.
[root@server01 ~]# kafka-reassign-partitions.sh --bootstrap-server server01:9092 --reassignment-json-file reassign.json --verify
Status of partition reassignment:
Reassignment of partition test-0 is complete.
Reassignment of partition test-1 is complete.
Reassignment of partition test-2 is complete.
Clearing broker-level throttles on brokers 1,2,3
Clearing topic-level throttles on topic test
1.4 결과를 확인한다.
[root@server01 ~]# kafka-topics.sh --bootstrap-server server01:9092 --topic test --describe
Topic: test TopicId: TCzzJwfHTB-QxTQYJpcIKg PartitionCount: 3 ReplicationFactor: 2 Configs: segment.bytes=1073741824
Topic: test Partition: 0 Leader: 2 Replicas: 3,2 Isr: 2,3
Topic: test Partition: 1 Leader: 1 Replicas: 1,3 Isr: 3,1
Topic: test Partition: 2 Leader: 2 Replicas: 2,1 Isr: 1,2
추가적으로 아래와 같이 throttle을 조정할 수도 있다.
# throttle 조정 (최대 50mb/s)
kafka-reassign-partitions.sh --bootstrap-server server01:9092 \
--execute --reassignment-json-file reassign.json --throttle 50000000
2. 브로커의 다른 로그 디렉토리에 파티션 재할당
partition이 특정 로그 디렉토리에 몰려있는 경우 디스크 full로 broker 장애가 발생할 수 있다.
server01의 test-1을 kafka-logs2에서 kafka-logs로 재할당한다.
[root@server01 ~]# ll -d /kafka/kafka-logs/t*
drwxr-xr-x. 2 root root 204 Aug 23 07:12 /kafka/kafka-logs/test-2
[root@server01 ~]# ll -d /kafka/kafka-logs2/t*
drwxr-xr-x 2 root root 167 Aug 23 09:10 /kafka/kafka-logs2/test-1
2.1 reassign.json을 작성한다. (file 이름은 기호에 맞게 변경 가능함)
[참고] log_dirs의 수는 replicas의 수와 동일해야한다.
또한 test-1의 replicas-1과 /kafka/kafka-logs가 매핑되고, replicas-3과 any가 매핑된다.
{
"version" : 1,
"partitions" : [
{"topic" : "test", "partition" : 0, "replicas" : [3,2],"log_dirs":["any","any"]},
{"topic" : "test", "partition" : 1, "replicas" : [1,3],"log_dirs":["/kafka/kafka-logs","any"]},
{"topic" : "test", "partition" : 2, "replicas" : [2,1],"log_dirs":["any","any"]}
]
}
2.2 reassign-partitions을 적용한다.
[root@server01 ~]# kafka-reassign-partitions.sh --bootstrap-server server01:9092 --reassignment-json-file reassign.json --execute
Current partition replica assignment
{"version":1,"partitions":[{"topic":"test","partition":0,"replicas":[3,2],"log_dirs":["any","any"]},{"topic":"test","partition":1,"replicas":[1,3],"log_dirs":["any","any"]},{"topic":"test","partition":2,"replicas":[2,1],"log_dirs":["any","any"]}]}
Save this to use as the --reassignment-json-file option during rollback
Successfully started partition reassignments for test-0,test-1,test-2
Successfully started log directory move for: test-1-1
2.3 진행상황을 확인한다.
[root@server01 ~]# kafka-reassign-partitions.sh --bootstrap-server server01:9092 --reassignment-json-file reassign.json --verify
Status of partition reassignment:
Reassignment of partition test-0 is complete.
Reassignment of partition test-1 is complete.
Reassignment of partition test-2 is complete.
Reassignment of replica test-1-1 completed successfully.
Clearing broker-level throttles on brokers 1,2,3
Clearing topic-level throttles on topic test
2.4 결과를 확인한다.
[root@server01 kafka-logs2]# ll -d /kafka/kafka-logs/t*
drwxr-xr-x 2 root root 141 Aug 23 09:28 /kafka/kafka-logs/test-1
drwxr-xr-x. 2 root root 204 Aug 23 07:12 /kafka/kafka-logs/test-2
3. 리더 재선출
가장 성능이 좋은 broker server나 여유 있는 broker로 leader partition을 재할당 할 때 사용한다.
test-1의 leader를 broker1에서 broker3으로 변경한다.
[root@server01 ~]# kafka-topics.sh --bootstrap-server server01:9092 --topic test --describe
Topic: test TopicId: TCzzJwfHTB-QxTQYJpcIKg PartitionCount: 3 ReplicationFactor: 2 Configs: segment.bytes=1073741824
Topic: test Partition: 0 Leader: 2 Replicas: 3,2 Isr: 2,3
Topic: test Partition: 1 Leader: 1 Replicas: 1,3 Isr: 3,1
Topic: test Partition: 2 Leader: 2 Replicas: 2,1 Isr: 1,2
3.1 reassign.json을 작성한다. (file 이름은 기호에 맞게 변경 가능함)
replicas에서 leader로 선출하고 싶은 broker를 앞으로 옮긴다. 기존 [1,3]에서 [3,1]로 변경하였음
{
"version" : 1,
"partitions" : [
{"topic" : "test", "partition" : 0, "replicas" : [3,2],"log_dirs":["any","any"]},
{"topic" : "test", "partition" : 1, "replicas" : [3,1],"log_dirs":["any","any"]},
{"topic" : "test", "partition" : 2, "replicas" : [2,1],"log_dirs":["any","any"]}
]
}
3.2 reassign-partitions을 적용한다.
[root@server01 ~]# kafka-reassign-partitions.sh --bootstrap-server server01:9092 --reassignment-json-file reassign.json --execute
Current partition replica assignment
{"version":1,"partitions":[{"topic":"test","partition":0,"replicas":[2,3],"log_dirs":["any","any"]},{"topic":"test","partition":1,"replicas":[1,3],"log_dirs":["any","any"]},{"topic":"test","partition":2,"replicas":[1,2],"log_dirs":["any","any"]}]}
Save this to use as the --reassignment-json-file option during rollback
Successfully started partition reassignments for test-0,test-1,test-2
3.3 결과를 확인한다.
아직 leader가 재선출되지 않은 것을 확인할 수 있다. leader 재선출을 위해서는 별도의 커맨드를 더 실행해야한다.
[root@server01 ~]# kafka-topics.sh --bootstrap-server server01:9092 --topic test --describe
OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
Topic: test TopicId: TCzzJwfHTB-QxTQYJpcIKg PartitionCount: 3 ReplicationFactor: 2 Configs: segment.bytes=1073741824
Topic: test Partition: 0 Leader: 2 Replicas: 3,2 Isr: 2,3
Topic: test Partition: 1 Leader: 1 Replicas: 3,1 Isr: 3,1
Topic: test Partition: 2 Leader: 1 Replicas: 2,1 Isr: 1,2
3.4 kafka-preferred-replica-election 실행
[root@server01 ~]# kafka-preferred-replica-election.sh --bootstrap-server server01:9092
This tool is deprecated. Please use kafka-leader-election tool. Tracking issue: KAFKA-8405
Successfully completed preferred leader election for partitions test-1, test-0, test-2
3.5 결과 확인
leader가 의도한 것과 동일하게 재선출된 것을 확인할 수 있다.
[root@server01 ~]# kafka-topics.sh --bootstrap-server server01:9092 --topic test --describe
Topic: test TopicId: TCzzJwfHTB-QxTQYJpcIKg PartitionCount: 3 ReplicationFactor: 2 Configs: segment.bytes=1073741824
Topic: test Partition: 0 Leader: 3 Replicas: 3,2 Isr: 2,3
Topic: test Partition: 1 Leader: 3 Replicas: 3,1 Isr: 3,1
Topic: test Partition: 2 Leader: 2 Replicas: 2,1 Isr: 1,2
'hadoop' 카테고리의 다른 글
apache kafka_2.13-2.8.0 설치 (0) | 2022.05.03 |
---|---|
atlas 로그인 authentication error (0) | 2022.04.27 |
댓글