[Kafka] 브로커, 복제, ISR

1. Kafka broker

  • 카프카 브로커: 카프카가 설치되어 있는 서버 단위
  • 보통 3개 이상의 broker로 구성하여 사용하는 것을 권장합니다.
  • 파티션 1개, replication이 1인 topic이 존재하고, 브로커가 3대라면
    • 브로커 3대 중 1대에 해당 토픽의 정보(데이터)가 저장됩니다.

2. replication

  • 파티션의 복제를 뜻합니다.
    • replication이 1 -> 파티션이 한 개 존재한다는 뜻입니다.
    • replication이 2 -> 파티션은 원본 1개와 복제본 1개로 총 2개가 존재합니다.
    • replication이 3 -> 파티션은 원본 1개와 복제본 2개로 총 3개가 존재합니다.
  • 브로커 개수에 따라 replication 갯수가 제한됩니다.
    • 브로커 개수가 3이면 replication은 4가 될 수 없습니다.

3. ISR

  • 원본 파티션 1개는 ‘Leader partition’이라고 부릅니다.
  • 나머지 복제본 파티션은 ‘Follower partition’이라고 부릅니다.
  • 원본 + 복제본 파티션을 합쳐서 ISR(In Sync Replica)라고 볼 수 있습니다.

4. Replication을 사용하는 이유

  • Replication은 파티션의 ‘고가용성’을 위해 사용됩니다.
  • 만약 브로커가 3개인 카프카에서 replication이 1이고 partition이 1인 토픽이 존재할 때, 브로커가 어떠한 이유로 사용 불가하면 해당 파티션은 복구할 수 없습니다.
  • 하지만 replication이 2라면, 브로커 1개가 죽더라고 Follower partition(복제본)이 존재함으로 복구가 가능합니다. -> 나머지 1개의 Follower partition이 Leader partition 역할을 승계하게 됩니다.

5. Leader partition과 Follower partition의 역할

  • 프로듀서가 토픽의 파티션에 데이터를 전달 할 때 전달받는 주체 -> Leader partition
  • ack
    • 프로듀서에는 ack라는 상세 옵션이 있습니다.
    • ack를 통해 고가용성을 유지할 수 있는데, 이 옵션은 partition의 replication과 관련이 있습니다.
    • ack는 0, 1, all 옵션 중 한 개를 골라서 설정할 수 있습니다.
  • ack가 0일 경우
    • 프로듀서는 Leader partition에 데이터를 전송하고 응답값을 받지 않습니다.
    • Leader partition에 정상적으로 전달 되었는지, 나머지 partition에 정상적으로 복제되었는지 알 수 없고, 보장할 수 없습니다.
    • 속도는 빠르지만 데이터 유실 가능성이 있습니다
  • ack가 1일 경우
    • Leader partition에 데이터를 전송하고 정상적으로 받았는지 응답값을 받습니다.
    • 나머지 partition에 복제되었는지는 알 수 없습니다.
    • 만약 Leader partition이 데이터를 받은 즉시 브로커에 장애가 난다면, 나머지 partition에 데이터가 전송되지 못한 상태이므로 ack 0 옵션과 같이 데이터 유실 가능성이 있습니다.
  • ack가 all일 경우
    • 1옵션에 추가로 복제가 정상적으로 되었는지 응답값을 받습니다.
    • 데이터 유실은 없지만 속도가 현저히 느립니다.

6. Replication의 갯수

  • Replication이 많을수록 좋을까?
    • replication이 많으면 브로커의 resource 사용량도 늘게 됩니다.
    • 카프카에 들어오는 데이터량과 retention date(저장시간)을 잘 고려하여 갯수를 정해야합니다.
    • 3개 이상의 브로커를 사용 할 때 replication은 3으로 설정하는 것을 추천드립니다.