ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kafka 기초 - Consumer
    Framework & Library/Kafka 2023. 2. 18. 19:38

    Consumer

    Consumer의 동작 방식

     

     - Consumer는 각각 고유의 속도로 Partition으로부터 순서대로 Read를 수행한다.

     - 다른 Consumer Group에 속한 Consumer들은 서로 관련이 없으며, Partition에 있는 Event를 동시에 다른 위치에서 Read 할 수 있다.

     

    Consumer Offset

     

     - Consumer Offset은 Consumer Group이 읽은 위치를 표시하는 역할을 한다.

     - Consumer가 자동이나 수동으로 데이터를 읽은 위치를 commit 하여 다시 읽음을 방지한다.

     - __consumer_offsets라는 Internal Topic에서 Consumer Offset을 저장하여 관리한다.

     

     Partition과 Consumer

     

    1. Multi-Partitions with Single Consumer

     

     - 4개의 Partition으로 구성된 Topic의 데이터를 사용하는 Single Consumer가 있는 경우, 이 Consumer는 Topic의 모든 Partition에서 모든 Record를 소비한다.

     - 하나의 Consumer는 각 Partition에서의 Consumer Offset을 별도로 유지하면서, 모든 Partition에서 Record를 소비한다.

     

    2. Consuming as a Group

     

     - 동일한 group.id로 구성된 모든 Consumer들은 하나의 Consumer Group을 형성한다.

     - 4개의 Partition이 있는 Topic을 소비하는 4개의 Consumer가 하나의 Consumer Group에 있다면, 각 Consumer는 정확히 하나의 Partition에서 Record를 소비한다.

     - 하나의 Partition은 항상 Consumer Group 내의 하나의 Consumer에 의해서만 사용된다.

     

     

    3. Multi Consumer Group

     

     - 동일한 group.id로 구성된 모든 Consumer들은 하나의 Consumer Group을 형성한다.

     - Consumer Group의 Consumer들은 작업량을 어느 정도 균등하게 분할한다.

     - 동일한 Topic에서 데이터를 소비하는 여러 Consumer Group이 있을 수 있다.

     

    Message Ordering(메시지 순서)

     

     - Partition이 2개 이상인 경우 모든 메시지에 대한 전체 순서 보장이 불가능하다.

     - Partition을 1개로 구성하면 모든 메시지에서 전체 순서 보장이 가능하지만 처리량이 저하된다.

     - Partition을 1개로 구성해서 모든 메시지에서 전체 순서 보장을 해야 하는 경우보다 Key로 구분할 수 있는 메시지들의 순서 보장이 필요한 경우가 많다.

     

     

     - 동일한 Key를 가진 메시지는 동일한 Partition에만 전달되어 Key 레벨의 순서 보장이 가능하다.

     - 즉, 멀티 Partition 사용이 가능함으로써, 처리량 증가를 보장할 수 있다.

     - 하지만, 운영 중에 Partition 개수를 변경하면 순서 보장이 불가능하기 때문에 권장하지 않는다.

     

    Key Cardinality

     

     - Key Cardinality는 특정 데이터 집합에서 유니크한 값의 개수를 의미한다. Key Cardinality는 Consumer Group의 개별 Consumer가 수행하는 작업의 양에 영향을 미친다.

     - 위와 같은 이유로, Key 선택이 잘못되면 작업 부하가 고르지 않을 수 있다.

     - 또한, Key는 Integer, String 등과 같은 단순한 유형일 필요가 없다.

     - Key는 Value와 마찬가지로 Avro, JSON 등 여러 필드가 있는 복잡한 객체일 수 있다.

     - 따라서, Partition 전체에 Record를 고르게 배포하는 Key를 만드는 것이 중요하다.

     

    Consumer Failure의 과정

     

    1. 4개의 Partition이 있는 Topic을 소비하는 4개의 Consumer가 하나의 Consumer Group에 있다면, Consumer는 정확이 하나의 Partition에서 Record를 소비한다,

    2. 또한, Partition은 항상 Consumer Group 내의 하나의 Consumer에 의해서만 사용된다.

    3. 이때, Consumer Group 내의 특정 Consumer가 통신하고 있던 Partition과 연결이 끊어졌다고 가정해 보겠다.

     

     

    3. Consumer Group 내의 다른 Consumer가 실패한 Consumer를 대신하여 Partition에서 데이터를 가져와서 처리한다.

    4. Partition은 항상 Consumer Group 내의 하나의 Consumer에 의해서만 사용된다.

    5. 이때, Consumer는 주어진 Topic에서 0개 이상의 많은 Partition을 사용할 수 있다.

     

    최종 정리

     1. Consumer가 자동이나 수동으로 데이터를 읽은 위치를 commit 하여 다시 읽음을 방지한다.

     2. __consumer_offsets라는 Internal Topic에서 Consumer Offset을 저장하여 관리한다.

     3. 동일한 group.id로 구성된 모든 Consumer들은 하나의 Consumer Group을 형성한다.

     4. 다른 Consumer Group의 Consumer들은 분리되어 독립적으로 작동한다.

     5. 동일한 Key를 가진 메시지는 동일한 Partition에만 전달되어 Key 레벨의 순서 보장이 가능하다.

     6. Key 선택이 잘못되면 작업 부하가 고르지 않을 수 있다.

     7. Consumer Group 내의 다른 Consumer가 실패한 Consumer를 대신하여 Partition에서 데이터를 가져와서 처리한다.


    출처

     https://fastcampus.co.kr/dev_online_kafka

     

    728x90

    'Framework & Library > Kafka' 카테고리의 다른 글

    Kafka - In-Sync-Replicas  (0) 2023.02.20
    Kafka - Replication  (0) 2023.02.20
    Kafka 기초 - Producer  (0) 2023.02.18
    Kafka 기초 - Broker, Zookeeper  (0) 2023.02.18
    Kafka 기초 - Topic, Partition, Segment  (0) 2023.02.17

    댓글

Designed by Tistory.