ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kafka] Replication 의 시간은 얼마나 걸릴까 ? ( kafka-reassign-partitions )
    Kafka 2024. 1. 14. 07:39
    728x90
    반응형

     

    - 목차

     

    들어가며.

    이번 글에서는 하나의 실험을 진행하려고 합니다.

    아래의 그림처럼 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분이 소요되었습니다.

    저의 경우는 로컬 환경에서 수행한 테스트라 실제 운영환경에서는 소요 시간이 다를 수도 있습니다.

     

     

    반응형
Designed by Tistory.