ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kafka 개념] Kafka 브로커, 복제, ISR(In-Sync-Replica)
    Apache Kafka/개념 정리 2024. 2. 9. 17:46

     

    Kafka Broker

    카프카 브로커는 카프카가 설치되어 있는 서버 단위를 말한다.

    보통 3개 이상의 브로커로 구성하여 사용하는 것을 권장한다.

     

    만약 파티션이 1개이고, replication이 1인 topic이 존재하며 브로커가 3대라면,

    브로커 3대 중 1대에 해당 토픽의 정보(데이터)가 저장된다.

     

     

     

     

     

    Kafka Replication

    replication은 partition의 복제를 뜻한다.

     

    만약 replication이 1이라면, partition은 1개만 존재한다는 것이고

    replication이 2라면, partition은 원본 1개와 복제본 1개로 총 2개가 존재한다.

     

    replication이 3이라면??

     

    그렇다! replication이 3이라면, partition은 원본 1개와 복제본 2개로 총 3개가 존재하게 된다.

     

     

     

    참고로 replication 개수는 브로커 개수에 따라서 제한된다.

    --> 브로커 개수가 3이면, replication은 4이상이 될 수 없다는 의미

     

     

    또한 원본 1개의 partition은 Leader partition이라고 부르며

    나머지 복제본 partition은 Follower partition이라고 부른다.

     

     

    왜 Replication을 사용하는 걸까?

    Replication은 partition의 고가용성을 위해 사용된다.

    만약 브로커가 3개인 카프카에서 replication이 1이고 partition이 1인 topic이 존재한다고 가정해보자.

     

    갑자기 브로커가 어떠한 이유로 사용이 불가능하게 된다면

    더 이상 해당 파티션은 복구할 수 없다.

     

    만약 replication이 2면 어떻게 될까???

    원본 파티션이 사용 불가능해진다고 하더라도 팔로워 파티션이 존재하므로 복제본으로 복구가 가능하다.

    해당 Follower partition이 Leader partition 역할을 승계하게 되는 것이다.

     

     

     

     

    ISR(In-Sync-Replicas)

    ISR은 리더 파티션과 팔로워 파티션이 모두 싱크가 된 상태

    즉, 리더 파티션과 팔로워 파티션의 오프셋이 동일한 상태를 의미한다.

     

     

    예를 들어 복제 개수가 2인 토픽이 있다고 가정해보자.

    이 토픽에는 리더 파티션 1개와 팔로워 파티션이 1개가 존재할 것이다.

    리더 파티션에 0부터 3의 오프셋이 있다고 가정할 때, 팔로워 파티션에 동기화가 완료되려면

    0부터 3까지 오프셋이 존재해야 한다.

    동기화가 완료됐다는 의미는 리더 파티션의 모든 데이터가 팔로워 파티션에 복제된 상태를 말하기 때문이다.

    ---> ISR 상태 만족

     

     

    동기화된 상태에서는 리더 또는 팔로워 파티션이 위치하는 브로커에 장애가 발생하더라도

    데이터를 안전하게 사용할 수 있다.

     

     

    ISR로 묶인 리더 파티션과 팔로워 파티션은 파티션에 존재하는 데이터가 모두 동일하기 때문에

    팔로워 파티션은 리더 파티션으로 새로 선출될 자격을 가진다.

     

     

    반면 ISR로 묶이지 못한 팔로워 파티션은 리더로 선출될 자격이 없다.

    왜냐하면 리더 파티션의 데이터를 모두 복제하지 못한 상태이고,

    이렇게 싱크가 되지 않은 팔로워 파티션이 리더 파티션으로 선출되면 데이터가 유실될 수 있기 때문이다.

     

    ISR이라는 용어가 나온 이유는?

    팔로워 파티션이 리더 파티션으로부터 데이터를 복제하는 데에 시간이 걸리기 때문이다.

     

    프로듀서가 특정 파티션에 데이터를 저장하는 작업은 리더 파티션을 통해 처리한다.

    이때 리더 파티션에 새로운 레코드가 추가되어 오프셋이 증가하면,

    팔로워 파티션이 위치한 브로커는 리더 파티션의 데이터를 복제한다.

     

    리더 파티션에 데이터가 적재된 이후, 팔로워 파티션이 복제하는 시간차 떄문에

    리더 파티션과 팔로워 파티션 간에 오프셋 차이가 발생한다.

    이런 차이를 모니터링하기 위해 리더 파티션은 replica.lag.time.max.ms값 만큼의 주기를 가지고

    팔로워 파티션이 데이터를 복제하는지 확인한다.

     

    만약 팔로워 파티션이 replica.lag.time.max.ms값보다 더 긴 시간 동안

    데이터를 가져가지 않는다면 해당 팔로워 파티션에 문제가 생긴 것으로 판단하고 ISR 그룹에서 제외한다.

     

    데이터 유실이 발생하더라도 서비스를 중단하지 않고 지속적으로 토픽을 사용하고 싶다면?

    지속적으로 토픽을 사용하고 싶다면 ISR이 아닌 팔로워 파티션을 리더로 선출하도록 설정할수도 있다.

     

    unclean.leader.election.enable=true

    • true로 설정하는 경우, ISR이 아닌 팔로워 파티션도 리더로 선출될 수 있다.
    • 일부 데이터는 유실될 수 있으나, 토픽을 사용하는 서비스의 중단은 발생하지 않는다.

     

    unclean.leader.election.enable=false

    • false로 설정할 경우, ISR이 아닌 팔로워 파티션을 리더 파티션으로 선출하지 않는다.
    • 장애가 발생한 브로커가 다시 실행될 때까지 해당 토픽은 사용할 수 없다.
    • 대신에 데이터 유실은 발생하지 않는다.
    • 브로커가 다시 실행되면 그때부터 안전하게 데이터를 처리할 수 있다.

     

     

    결론적으로 일부 데이터가 유실되더라도

    토픽과 연동 중인 서비스의 무중단 운영이 더 중요하다면 true로 설정하면 되고,

    반면, 데이터가 유실되면 안 되는 경우에는 false로 설정해야 한다.

    $ bin/kafka-topics.sh --bootstrap-server {kafka hostname}:9092 \
    --create --topic {topic name} \
    --config unclean.leader.election.enable=false

     

     

     

     

     

     

    본 내용은 아래 교재와 강의를 바탕으로 정리한 글입니다.

     

    아파치 카프카 애플리케이션 프로그래밍 with 자바 | 최원영 - 교보문고

    아파치 카프카 애플리케이션 프로그래밍 with 자바 | 아파치 카프카 애플리케이션 개발을 위한 「실전 가이드」 아파치 카프카란 무엇일까? 카프카 애플리케이션은 어떻게 만들까? 데이터 파이

    product.kyobobook.co.kr

     

     

Designed by Tistory.