-
[Kafka] Replication 의 시간은 얼마나 걸릴까 ? ( kafka-reassign-partitions )Kafka 2024. 1. 14. 07:39728x90반응형
- 목차
들어가며.
이번 글에서는 하나의 실험을 진행하려고 합니다.
아래의 그림처럼 Replication Factor 을 1개 추가하여 모든 브로커에서 Partition 복제가 발생하는 경우,
얼마나 시간이 소요되는지를 파악하려고 합니다.
환경은 저희 로컬 컴퓨터 내에서 docker-compose 로 구현한 Kafka cluster 에서 진행하였습니다.
먼저 아래와 같이 test-topic 이라는 이름의 토픽을 생성하였구요.
Partiiton 은 3, Replication Factor 는 2로 설정하였습니다.
한 Partition 당 400MB 의 용량을 가지도록 레코드를 추가하였습니다.
Log File 의 크기는 아래와 같습니다.
total 400M -rw-r--r-- 1 appuser appuser 10M Jan 15 18:11 00000000000000000000.index -rw-r--r-- 1 appuser appuser 400M Jan 15 18:11 00000000000000000000.log -rw-r--r-- 1 appuser appuser 10M Jan 15 18:11 00000000000000000000.timeindex -rw-r--r-- 1 appuser appuser 8 Jan 15 18:06 leader-epoch-checkpoint -rw-r--r-- 1 appuser appuser 43 Jan 15 18:06 partition.metadata
Replication Factor 늘리기.
kafka-reassign-partitions 을 통해 Replication Factor 의 갯수를 늘려보겠습니다.
새롭게 추가된 Replication Factor 로 파티션이 복제되는 시간을 측정하는 것이 목표입니다.
400MB Partition 의 Replication 소요 시간.
결과부터 말씀드리면 400MB 인 Partittion 을 복제하는데에 2초의 시간이 소요되었습니다.
reassign-partitions 명령어는 아래와 같습니다.
cat <<EOF> /tmp/repartition.json { "version": 1, "partitions": [ {"topic": "test-topic", "partition": 0, "replicas": [1, 2, 3]}, {"topic": "test-topic", "partition": 1, "replicas": [2, 3, 1]}, {"topic": "test-topic", "partition": 2, "replicas": [3, 1, 2]} ] } EOF kafka-reassign-partitions --bootstrap-server localhost:9092 \ --reassignment-json-file /tmp/repartition.json --execute
아래 결과는 새로운 브로커에 Replication Factor 가 생성되는데에 소요된 시간을 측정하기 위해서
Log File 의 용량을 반복적으로 체크하였습니다.
"Thu Jan 17 18:17:24 UTC 2024" ~ "Thu Jan 17 18:17:26 UTC 2024" 까지 대략 2초가 소요되었습니다.
400MB 의 Log FIle 은 복제되는데에 2초 가량이 소요됨을 알 수 있습니다.
Thu Jan 17 18:17:24 UTC 2024 total 148M -rw-r--r-- 1 appuser appuser 10M Jan 17 18:17 00000000000000000000.index -rw-r--r-- 1 appuser appuser 148M Jan 17 18:17 00000000000000000000.log -rw-r--r-- 1 appuser appuser 10M Jan 17 18:17 00000000000000000000.timeindex -rw-r--r-- 1 appuser appuser 8 Jan 17 18:17 leader-epoch-checkpoint -rw-r--r-- 1 appuser appuser 43 Jan 17 18:17 partition.metadata Thu Jan 17 18:17:25 UTC 2024 total 273M -rw-r--r-- 1 appuser appuser 10M Jan 17 18:17 00000000000000000000.index -rw-r--r-- 1 appuser appuser 273M Jan 17 18:17 00000000000000000000.log -rw-r--r-- 1 appuser appuser 10M Jan 17 18:17 00000000000000000000.timeindex -rw-r--r-- 1 appuser appuser 8 Jan 17 18:17 leader-epoch-checkpoint -rw-r--r-- 1 appuser appuser 43 Jan 17 18:17 partition.metadata Thu Jan 17 18:17:25 UTC 2024 total 392M -rw-r--r-- 1 appuser appuser 10M Jan 17 18:17 00000000000000000000.index -rw-r--r-- 1 appuser appuser 392M Jan 17 18:17 00000000000000000000.log -rw-r--r-- 1 appuser appuser 10M Jan 17 18:17 00000000000000000000.timeindex -rw-r--r-- 1 appuser appuser 8 Jan 17 18:17 leader-epoch-checkpoint -rw-r--r-- 1 appuser appuser 43 Jan 17 18:17 partition.metadata Thu Jan 17 18:17:26 UTC 2024 total 396M -rw-r--r-- 1 appuser appuser 10M Jan 17 18:17 00000000000000000000.index -rw-r--r-- 1 appuser appuser 396M Jan 17 18:17 00000000000000000000.log -rw-r--r-- 1 appuser appuser 10M Jan 17 18:17 00000000000000000000.timeindex -rw-r--r-- 1 appuser appuser 8 Jan 17 18:17 leader-epoch-checkpoint -rw-r--r-- 1 appuser appuser 43 Jan 17 18:17 partition.metadata
5GB Partition 의 Replication 소요 시간.
실험의 내용은 400MB 인 파티션을 복제하는 과정과 동일합니다.
대신 파티션의 사이즈를 5GB 로 증량시킨 상태입니다.
5GB 의 Partition 이 복제되는데에 소요되는 시간을 파악해보겠습니다.
결론적으로 "Thu Jan 17 18:34:38 UTC 2024" ~ "Thu Jan 17 18:35:46 UTC 2024" 까지 대략 1분이 소요되었습니다.
Thu Jan 17 18:34:38 UTC 2024 -rw-r--r-- 1 appuser appuser 144M Jan 17 18:34 00000000000000000000.log ... Thu Jan 17 18:35:06 UTC 2024 -rw-r--r-- 1 appuser appuser 1.0G Jan 17 18:34 00000000000000000000.log -rw-r--r-- 1 appuser appuser 1.0G Jan 17 18:34 00000000000050394532.log -rw-r--r-- 1 appuser appuser 974M Jan 17 18:35 00000000000100780113.log ... Thu Jan 17 18:35:12 UTC 2024 -rw-r--r-- 1 appuser appuser 1.0G Jan 17 18:34 00000000000000000000.log -rw-r--r-- 1 appuser appuser 1.0G Jan 17 18:34 00000000000050394532.log -rw-r--r-- 1 appuser appuser 1.0G Jan 17 18:35 00000000000100780113.log -rw-r--r-- 1 appuser appuser 496M Jan 17 18:35 00000000000151089270.log ... Thu Jan 17 18:35:46 UTC 2024 -rw-r--r-- 1 appuser appuser 1.0G Jan 17 18:34 00000000000000000000.log -rw-r--r-- 1 appuser appuser 1.0G Jan 17 18:34 00000000000050394532.log -rw-r--r-- 1 appuser appuser 1.0G Jan 17 18:35 00000000000100780113.log -rw-r--r-- 1 appuser appuser 1.0G Jan 17 18:35 00000000000151089270.log -rw-r--r-- 1 appuser appuser 1.0G Jan 17 18:35 00000000000201373244.log -rw-r--r-- 1 appuser appuser 37M Jan 17 18:35 00000000000251776395.log
마치며.
400MB 파티션의 복제는 2초, 5GB 파티션의 복제는 1분이 소요되었습니다.
저의 경우는 로컬 환경에서 수행한 테스트라 실제 운영환경에서는 소요 시간이 다를 수도 있습니다.
반응형'Kafka' 카테고리의 다른 글
[Kafka Producer] Data Loss 는 언제 발생할까 ? (0) 2024.01.21 Kafka Controller 알아보기 (0) 2024.01.17 [Kafka Consumer] Exactly-Once 구현하기 (0) 2024.01.13 Kafka Consumer Configuration 알아보기 ( session.timeout.ms, heartbeat.interval.ms, auto.offset.reset, auto.commit.interval.ms ) (0) 2024.01.13 Kafka Consumer Configuration 알아보기 (fetch.min.bytes, fetch.max.wait.ms, max.parti (1) 2024.01.12