ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kafka Consumer 개념
    Kafka 2023. 9. 13. 17:14
    728x90
    반응형

    - 목차

     

     

    * 소개

    Kafka ConsumerKafka Broker 로부터 메시지를 읽어들이는 전반적인 과정을 설명하고자 합니다.

     
     

    * partition - consumer

    Kafka Producer 가 생성하는 메시지들은 Topic 의 여러 Partition분산저장됩니다.
    Kafka Consumer 가 특정 Topic 을 조회한다는 의미는 Topic 의 Partition 들을 개별조회하는 것을 뜻합니다.
    만약 Topic A 의 Partition 이 4개라면 Kafka Consumer 들은 각각의 Partition 을 조회하게 됩니다.
     
    그리고 Partition <-> Consumer 의 매칭의 대전제는 N : 1 으로 적용되어야 한다는 것인데요.
    하나의 Partition 을 2개 이상의 Consumer 가 조회하는 것은 허용이 되지 않습니다.

     

    예를 들어보겠습니다.

    // Partition 4개 & Consumer 1개
    Topic A - Partition 1 <---> Consumer 1
    Topic A - Partition 2 <---> Consumer 1
    Topic A - Partition 3 <---> Consumer 1
    Topic A - Partition 4 <---> Consumer 1
    
    // Partition 4개 & Consumer 2개
    Topic A - Partition 1 <---> Consumer 1
    Topic A - Partition 2 <---> Consumer 1
    Topic A - Partition 3 <---> Consumer 2
    Topic A - Partition 4 <---> Consumer 2
    
    // Partition 4개 & Consumer 4개
    Topic A - Partition 1 <---> Consumer 1
    Topic A - Partition 2 <---> Consumer 2
    Topic A - Partition 3 <---> Consumer 3
    Topic A - Partition 4 <---> Consumer 4

     

    만약 Partition 의 수보다 Consumer 가 많아지면, idle 상태의 Consumer 가 생겨납니다.
    그렇기 때문에 Partition 의 갯수가 Consumer 의 Upper Limit 으로 동작합니다.

    // Partition 4개 & Consumer 6개
    Topic A - Partition 1 <---> Consumer 1
    Topic A - Partition 2 <---> Consumer 2
    Topic A - Partition 3 <---> Consumer 3
    Topic A - Partition 4 <---> Consumer 4
    
    Consumer 5 (Consume X)
    Consumer 6 (Consume X)

     

    * Consumer Group

    효율와 안전성의 측면에서 카프카는 토픽을 여러 파티션으로 나누게 됩니다.
    그렇게 함으로써 필연적으로 하나의 Topic 을 조회하는 Kafka Consumer 의 수는 2개 이상이 됩니다.
    이렇게 하나의 Topic 을 바라보는 Kafka Consumer 들을 논리적으로 연결짓게 되는데, 이를 Consumer Group 이라고 합니다.
     
    Consumer Group 을 관리하기 위해서 Consumer LeaderGroup Coordinator 의 상호작용이 필요합니다.
    아래에서 Consumer LeaderGroup Coordinator 의 설명을 이어가겠습니다.

    * Consumer Leader

    Consumer GroupConsumer 들의 체계적인 관리를 위하여 Consumer Leader 를 필요로합니다.
    Consumer LeaderConsumer Group 에 속한 Consumer 들 중 하나를 의미합니다.
    특정 Consumer Group 에 등록된 최초의 ConsumerLeader 의 자격을 부여받습니다.
     
    Consumer LeaderConsumer 로써의 역할 뿐만 아니라 Leader 로써의 역할도 수행해야하는데요.
    Leader 의 역할은 Topic 의 Partition 와 Consumer 의 매칭시키는 작업입니다.
    이 과정을 Partition Assignment 라고 하는데요.
    Consumer LeaderPartition Assignment 를 위해서 Group Coordinator 와 통신을 수행합니다.
    Group Coordinator 는 아래에서 자세히 설명하겠지만, Kafka Broker 중 하나를 의미합니다.
     
    Kafka Consumer 들이 bootstrap.serverstopic, group.id 정보를 가지고 최초 실행이 되면,
    Kafka ConsumerKafka Broker 에게 group.id 에 해당하는 Consumer GroupJoin 하겠다는 요청을 보내게 됩니다.
    이를 JoinGroup Request 하고 합니다.
     
    Kafka Brokergroup.initial.rebalance.delay.ms 로 설정된 시간만큼 모든 Kafka Consumer 들의 JoinGroup Request 들을 받아들입니다.
    ( group.initial.rebalance.delay.ms 의 default 값은 3000ms 입니다. )
     
    이렇게 group.initial.rebalance.delay.ms 동안에 요청된 JoinGroup Request 들을 토대로 Consumer Group 이 생성됩니다.
    그리고 첫번째로 Consumer GroupJoinKafka Consumer Consumer Leader 가 됩니다.
     
    Consumer LeaderKafka Broker (Group Coordinator) 로 부터 Consumer Group 에 등록된 Running 상태의 Consumer 정보를 전달받고,
    전달받은 Consumer 들을 기반으로 Partition Assignment 를 수행합니다.
    그리고 Partition Assignment 의 결과를 Broker 에게 전달하며,
    그 이후에 본격적인 Partition - Consumer 간의 데이터 조회가 실행됩니다.
    (Consumer Leader 가 결정한 Partition Assignment 결과를 Kafka Broker (Group Coordinator) 에게 전달하는 것은 SyncGroup Request 라고 합니다. )
     
    Consumer LeaderPartitionConsumer 간의 할당을 책임지는 것은 Client-Side Partition Assignment 라고 합니다.
    자세한 문서의 내용을 위해 아래 링크를 첨부하였습니다.
     
    <Client-Side Partition Assignment>
    https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Client-side+Assignment+Proposal

     

    * Group Coordinator

    Group CoordinatorKafka Broker 중에서 Group Coordinator 의 역할을 부여받은 Broker 입니다.
    Group Coordinator 의 가장 큰 역할인 Kafka Consumer 들이 Topic 의 Partition 을 잘 조회할 수 있도록 도움을 주는데에 있습니다.
     
    첫번째 역할은 JoinGroup Request 를 처리합니다.
    Group CoordinatorKafka ConsumerJoinGroup Request 를 받아 Consumer Group 을 생성하고
    Consumer 들을 해당 Group 에 등록시킵니다.
    그리고 Consumer Leader 를 지정하여 Leader 에게 구동 중인 Consumer 목록을 전달합니다.
    Consumer Leader 는 전달받은 Consumer 목록를 통해 Partition Assignment 를 수행할 수 있습니다.
     
    두번째 역할은 SyncGroup Request 를 처리합니다.
    Consumer Leader 는 Partition 이 Assign 된 Consumer 정보를 Group Coordinator 에게 전달합니다.
    Group Coordinator 은 Partition Assignment 정보를 토대로 각 Consumer 가 정상적으로 데이터를 조회할 수 있도록 합니다.
    비로서 토픽의 데이터 조회가 시작됩니다.
     
    세번째 역할은 Consumer 들의 heartbeat 를 수신하여 Consumer 의 running 상태 여부를 확인합니다.
    heartbeat.interval.ms 에 설정된 시간을 주기로 Consumer 는 heartbeat 를 전달합니다.
     
    이 과정에서 모종의 이유로 heartbeat 를 전달하지 못하는 Consumer 는 죽었다고 판단하며, Rebalancing 이 새롭게 수행됩니다.

    반응형

    'Kafka' 카테고리의 다른 글

    Kafka Replication (메시지 복제) 이해하기  (0) 2023.09.21
    kafka __consumer_offsets topic 이해하기  (0) 2023.09.18
    Kafka Producer Process (카프카 프로듀서 과정)  (0) 2023.09.09
    kafka consumer  (0) 2023.03.02
    kafka producer  (0) 2023.02.23
Designed by Tistory.