본문 바로가기
  • 노션에서 삽질한 내용을 정리하는 블로그
자기발전소/# Kafka_Confluent

[Kafka] Consumer

by iamlucia 2021. 5. 19.

📌 kafka 및 Confluent 를 공부하며 정리하는 글

 

카프카에서 데이터를 읽어내는 방식을 알아보자.

 

Consumer

  • topic(이름으로 식별 가능)으로부터 데이터를 읽는다.

  • producer가 자동으로 어떤 broker에 write해야 할지 인식하는 것과 같이,
    consumer 또한 어떤 broker로부터 데이터를 read 할지 자동으로 인식한다.

  • broker 장애 발생 시, producer와 마찬가지로 consumer는 복구하는 방법을 안다.

  • 데이터는 각 파티션 내에서 순서대로 read된다.

  • consumer가 복수의 파티션을 read하는 경우, 그 파티션은 하나의 consumer에 의해 병행적으로 read된다. 순서에 대한 보장은 없음 (하나의 파티션 내에서는 순서에 맞게 read되지만)

 

1) Consumer Groups

 

Consumer는 Consumer Group 안에서 데이터를 read 한다. 

하나의 그룹 내 각 consumer는 서로 다른 파티션을 읽는다(exclusive한 관계). 

파티션보다 consumer가 많다면, 유휴 consumer가 발생한다. 

따라서, consumer를 많이 가지려면 partition 갯수를 늘려야 한다. (파티션의 갯수와 브로커의 갯수는 상관없다)

 

💡 Consumer는 Group Coordinator 와 Consumer Coordinator를 활용하여 consumer에 partition을 할당한다.

 

2) Consumer Offsets 

 

카프카는 consumer group이 read하고 있는 offset을 저장해두는데, commit된 offset은 __consumer_offsets이라는 카프카 내부 토픽에 저장된다. 그래서 Consumer 하나에 장애가 났다 복구되는 경우, commit된 offset부터 다시 읽는다. 

 

💡 컨슈머가 데이터를 처리하게 되면, 컨슈머는 offset을 commit하게 된다.

 

2) Delivery Semantics 

컨슈머는 언제 offset을 commit할지 선정하는데, 3가지의 방식이 있다.

 

2-1) At most Once : 손실 가능

  • 메세지를 받자마자 처리하기도 전에 offset을 commit한다.

  • 만약 처리과정에 오류가 생기게 되면 메세지는 손실될 수 있다. (다시 이전으로 돌아가서 읽지 않기 때문에)

2-2) At Least Once : 중복 가능 (대체로 권장되는 방법)

  • 메세지가 처리된 후에 offset이 commit된다.

  • 만약 처리과정에 오류가 생기게 되면, 메세지는 다시 읽히게 되어 중복이 발생할 수 있다.

  • 따라서 처리과정이 idempotent 특성을 가져야 한다 = 메세지를 한 번 더 처리하는 과정이 시스템에 영향을 주어서는 안된다.

2-3) Exactly Once : Idempotent Consume

 

  • kafka to kafka workflow 에 해당 (Kafka Streams API를 사용한 통신 방식)

  • Kafka -> External System 간 통신에서는 idempotent consumer 를 사용해야 한다. 

'자기발전소 > # Kafka_Confluent' 카테고리의 다른 글

[Kafka] Producer 관련 주요 옵션  (0) 2021.05.29
[Kafka] Broker & Zookeeper  (0) 2021.05.19
[Kafka] Producer  (0) 2021.05.19
[Kafka] Topic  (0) 2021.05.19
[Kafka] Apache Kafka란  (0) 2021.05.19