ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kafka Replication (메시지 복제) 이해하기
    Kafka 2023. 9. 21. 07:34
    728x90
    반응형

    - 목차

     

    Replication 이란 ?

    Topic 은 Kafka Message 들을 저장하고 관리하는 주체입니다.

    이러한 Topic 은 여러 Partition 들로 나뉘어집니다.

    기본값으로 제공되는 Partition 은 3개입니다.

    그래서 Topic 으로 삽입되는 Kafka Message 들을 각각 Partition 으로 나뉘어져 저장이 됩니다.

    Partition 의 갯수만큼 N 분의 1로 저장되는 느낌이죠.

     

    그리고 각 Partition 은 Replication 처리가 되어 여러 Broker 들로 복제되어 분산됩니다.

    Partition 의 Replication 은 카프카가 데이터의 Persistency, Consistency 그리고 Fail-Over 를 구축하는 방식입니다.

     

    Topic - Partition - Replication 의 관계를 설명하기 위해서 아래 이미지를 한번 봐주세요.

     

    < 출처 : https://blog.ippon.tech/event-driven-architecture-getting-started-with-kafka-part-2/ >

     

    위 이미지에 해당하는 Kafka Cluster 는 아래와 같은 구조를 가집니다.

    - 4개의 Broker ( broker 0 , broker 1, broker 2, broker 3 )

    - 1개의 Topic ( Orders )

    - 4개의 Partition ( "Orders" Topic 은 4개의 Partition 을 가집니다. )

    - 3개의 Replication-Factor

     

    broker 0 는 Partition 3 의 Leader Broker 입니다.

    broker 1 은 Partition 1 의 Leader Broker 입니다.

    broker 2 은 Partition 0 의 Leader Broker 입니다.

    broker 3 은 Partition 2 의 Leader Broker 입니다.

    각각의 Leader Broker 는 Client 의 Read/Write 를 책임지는 메인 서버가 됩니다.

     

    반면 broker 0 은 Partition 0, Partition 1 의 Replication Broker 입니다.

    broker 1 은 Partition 0, Partition 2 의 Replication Broker 입니다.

    broker 2 은 Partition 2, Partition 3 의 Replication Broker 입니다.

    broker 3 은 Partition 1, Partition 3 의 Replication Broker 입니다.

    그래서 Leader Broker 가 메시지 생성을 처리한 결과를 받아 복제를 수행하게 되죠.

     

    즉, 하나의 Broker 는 Leader 이자 Replication Broker 가 될 수 있습니다.

    그리고 Replication 은 가능한 물리적으로 분산된 여러 Broker 에 분배되어 배치됩니다.

     

    Leader and Follower.

    Kafka Broker 들은 특정 Partition 의 Leader 또는 Follower 가 될 수 있습니다.

    대부분 하나의 Broker 는 Leader 와 Follower 의 역할을 동시에 수행하는 경우가 많습니다.

    Leader Broker 는 특정 Partition 에 Kafka Message 를 Read/Write 하는 Client 와 직접적인 소통을 합니다.

    그리고 Follower Broker 는 전적으로 Leader Broker 가 제공하는 Kafka Message 를 Replication 하는데에 집중합니다.

     

    아래 이미지는 Follower Broker 의 Replication 과정을 설명합니다.

    Leader Broker 로부터 생성된 Record 를 전달받아 Replication 을 수행하게 됩니다.

     

    < 출처 : https://medium.com/nerd-for-tech/apache-kafka-quick-start-1edeef53773e >

     

     

    Acknowledgement.

    Kafka 는 Record 의 Replication 을 보장하기 위해서 Acknowledgement 라는 개념을 사용합니다.

    Producer 는 Record 를 생성하기 위해서 Partition 의 Leader Broker 에게 요청을 전달합니다.

    key, value, header, timestamp 등의 데이터를 담아 하나의 Record 를 만들고, Producer 는 생성 요청을 전달하죠.

    생성 요청을 전달받은 Partition Leader Broker 는 자신의 Log Segment 에 해당하는 Record 를 저장합니다.

    그리고 Replication 이 시작됩니다.

    Leader Broker 는 Follower Broker 들에게 생성해야하는 Record 를 전달합니다.

    Follower Broker 를 전달받은 Record 를 복제하여 저장하죠.

    여기까지가 Record 의 생성을 위한 과정입니다.

    아래의 흐름대로 데이터 생성 요청이 전달됩니다.

    Producer --> Leader Broker --> Follower Broker

     

    Acknowlegement 는 생성의 역방향으로 전달됩니다.

    Acknowlegement 는 Record 가 정상적으로 생성이 된 경우에 Successful Write 상태를 이전 Broker 또는 Client 에게 응답합니다.

    Follower Broker 는 Leader Broker 에게 Record 가 생성되었다는 결과를 전달합니다. (Ack)

    Leader Broker 는 Product 에게 Record 가 생성되었다는 결과를 전달합니다. (Ack)

    Follower Broker --> Leader Broker --> Producer

     

     

    Producer Acks.

    ProduceracksKafka MessageReplication 이 보장되는 수준을 의미합니다.

    acks0, 1, all 세가지 값을 가질 수 있습니다.

     

    acks 이 0 인 경우에는 Fire-and-Forget 방식으로써 Replication 을 고려하지 않습니다.

    Producer 는 Record 의 생성 요청을 Leader Broker 에게 보내고, 그 이후의 응답은 전혀 고려하지 않습니다.

    acks 를 0 으로 설정함으로써 얻을 수 있는 이득은 데이터 처리의 퍼포먼스입니다.

    하지만 이는 데이터의 일관성 (Consistency) 을 보장할 수 없습니다.

     

    그리고 acks 가 1 인 경우는 Leader Broker 의 데이터 쓰기를 보장합니다.

    level 이 1 인 acks"acks == leader" 라고 표현하기도 합니다.

    acks 가 1 인 상황에서는 Leader Broker 가 성공적으로 Record 를 저장하였다면, 바로 Producer 로 응답을 하게 됩니다.

    즉, Follower Broker 의 Replication 을 고려하지 않습니다.

     

    마지막으로 acksall 또는 -1 인 케이스입니다.

    이는 Topicmin.insync.replicas 값만큼 Replication 을 보장하게 됩니다.

    replication-factor 이 3 이고, min.insync.replicas 가 2 라면

    Producer 는 적어도 2개의 Replication 이 성공한 이후에 Leader Broker 로부터 응답을 받을 수 있습니다.

     

    그래서 Kafka Acks 는 메시지의 생성 속도와 메시지의 안정성을 반비례하는 구조를 취합니다.

     

     

    반응형

    'Kafka' 카테고리의 다른 글

    Kafka Ksql 구현하기  (0) 2023.12.11
    Kafka-Connect & MySQL 구현하기  (0) 2023.12.09
    kafka __consumer_offsets topic 이해하기  (0) 2023.09.18
    Kafka Consumer 개념  (0) 2023.09.13
    Kafka Producer Process (카프카 프로듀서 과정)  (0) 2023.09.09
Designed by Tistory.