ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kafka] - 5. Consumer
    개발/Kafka 2022. 8. 4. 17:02

    Consumer


    고유의 속도로 Commit log에서 순서대로 Poll(Read를 수행)

     

    Consumer Offeset

    Consumer가 데이터를 읽을 위치를 Commit하여 다시 읽음을 방지한다.

     

    Topic_Consumer_offset

    Kafka internal Topic data로, Consumer의 offset의 위치를 저장하여 둔 공간이다.

     

    • 아래 그림을 보면, Group A의 초록색의 Consumer는 현재 2번까지 read를 한 뒤, 3번을 commit한다.
    • 이러한 Offset 정보는 Topic__consumer_offset이라는 Kafka internal 공간에 저장된다.
    • Group B에서 각 Consumer는 서로 다른 Partition의 Offset 정보를 가지고 있다.
    • 이를 각각의 Data로 Offset 정보로 저장되는 예시이다. 

     

    Topic __consumer_offsets

     

    Multi-partitions with single Consumer


    • Consumer Group 내에 Consumer가 한개, Consumer가 모든 Partition의 offset정보를 가지고 있는다.
    • Consumer가 Topic의 Partition에 있는 모든 Record를 Consume한다.

     

     

    Multi-partitions with multi Consumer


    • 동일한 group.id로 구성된 Consumer들은 하나의 Consumer group
    • Partition은 항상 Consumer Group 내에 하나의 Consumer에 의해서만 사용
    • 각 Consumer들은 정확히 하나의 partition에서 record를 Consume한다.
    • Consumer는 주어진 Topic내에서 0개 이상의 많은 Partition을 사용 가능

     

     

    Multi-partitions with multi Consumer group


    • Consumer들은 작업량을 어느정도 균등하게 처리하려고 한다.
    • 동일한 Topic에서 Consume하는 여러 Consumer Group이 있을 수 있다.
    • 다른 Consumer group의 Consumer들은 분리되어 독립적으로 동작한다.

     

     

    Message Ordering


    Message(Data)에 대해 순서보장
    • Partition이 2개 이상인 경우에는 모든 Message(data)에 대해 전체 순서 보장이 불가하다.
    • Partition을 1개로 구성하면, 순서는 보장이 되겠지만 병렬 처리 할 수가 없음으로 처리량이 저하된다.

     

    파티션이 2개 이상으로 순서보장이 되지 않는다.

     

    그렇다면 순서 보장을 해야 하는 경우가 얼마나 많을까?

    -> 대부분의 경우 Key로 구분 할 수 있는 Message(data)에 순서 보장이 필요한 경우가 많다.

     

    동일한 Key를 가진 Message(data)는 동일한 Partition에 전달하여 Key-level 순서를 보장하자(Multi Partition 가능)

    위와 같은 이유로 운영 중에 Partition 갯수를 변경? 알고리즘 및 순서가 보장되지 않음으로 절대 하지 말아야 한다.

     

    Message Ordering with key

     

    Cardinality


    특정 Data set에서 Unique한 갯수

     

    • Key cardinality는 Consumer Group에서 개별 Consumer가 수행하는 작업에 영향을 준다. (특정 Key만 계속 사용하여 특정 Partition에만 반복적으로 사용)
    • Key 선택이 잘 못 된다면, 작업 부하가 고르지 않을 수 있다.
    • Key는 Int, str 과 같이 단순 유형이 아니여도 된다.
    • Key는 value와 마찬 가지로 Object 가 가능하다(Avro, Json .. )
    • Partition 전체에 record를 고르게 배포하는 Key를 만들어야 한다.

     

    Consumer Rebalancing


    Consumer Failure라고 하며, 장애가 난 경우 실패한 Consumer를 대신하여 Partition에서 Data를 가져와 처리한다.
    • Partition의 갯수와 Consumer의 갯수가 동일하면 이상적이다.
    • Partition은 항상 Group 내에 하나의 Consumer에 의해서만 실행된다.
    • Consumer는 0개 이상의 Partition을 사용 가능하다.

     

     

    '개발 > Kafka' 카테고리의 다른 글

    [Kafka] - 7. In sync Replicas  (0) 2022.08.05
    [Kafka] - 6. Replication  (0) 2022.08.04
    [Kafka] - 4. Producer  (0) 2022.08.04
    [Kafka] - 3. Broker&Zookeeper  (0) 2022.08.03
    [Kafka] - 2. Topic&Partition&Segment  (0) 2022.08.03

    댓글

Designed by Tistory.