개발은 재밌어야 한다
article thumbnail
반응형

Producer

  • Producer : 메세지를 생산(Produce)해서 Kafka의 Topic으로 메세지를 보내는 애플리케이션
  • Consumer: Topic의 메세지를 가져와서 소비(Consume)하는 애플리케이션
  • Consumer Group: Topic의 메세지를 사용하기 위해 협력하는 Consumer들의 집합
  • 하나의 Consumer는 하나의 Consumer Group에 포함되며, Consumer Group 내의 Consumer들을 협력하여 Topic의 메세지를 병렬 처리함

 

Producer와 Consumer의 분리 (Decoupling)

Producer와 Consumer의 기본 동작 방식

  • Producer와 Consumer는 서로 알지 못하며, Producer와 Consumer는 각각 고유의 속도로 Commit Log에 Write 및 Read를 수행
  • 서로 다른 Consumer Group에 속한 Consumer들은 서로 관련이 없으며, Commit Log에 있는 Event(Message)를 동시에 다른 위치에서 Read 할 수 있음

프로듀서가 보내는 레코드(메세지 or 이벤트 or 이벤트 데이터)의 구조

  • Header
  • Key
  • Value

key와 value는 Avro, JSON등과 같은 다양한 형태가 가능하다.

카프카는 이렇게 보내진 데이터를 byte array로 저장합니다.

카프카는 수동적인 소프트웨어라 있는 그대로 byte array를 저장합니다.

JSON, String, Avro, Protobuf등을 그대로 Serializers해서 byte array로 저장합니다.

사용할 때에는 다시 Deserializers(역직렬화)해서 데이터를 가져오게 됩니다.

Producer의 샘플 코드

 

private Properties props = new Properties();
 
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "broker101:9092, broker102:9092");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, org.apache.kafka.common.serialization.StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, io.confluent.kafka.serializers.KafkaAvroSerializer.class);
 
KafkaProducer producer = new KafkaProducer(props);

 

 

 

카프카에 Producing하는 High-Level Architecture 구조

파티셔너의 역할

메세지를 토픽에 어떤 파티션으로 보낼지 결정하는 역할

보통 디폴트 파티셔너를 많이 쓰는데, 디폴트 파티셔너는 메제지에 있는 키값을 가지고 해시 알고리즘을 통해 숫자로 만든 다음에 해당 숫자로 몇번 파티션에 보낼지 정해주는 역할을 합니다.

 

 

왜 키가 null이 아닐때 일까?

카프카2.4버전 이전에는 라운드로빈방식으로 사용했지만 2.4버전이후에는 좀더 효율적으로 리소스를 사용하기 위해서 묶어서 데이터를 보내서 Batch하기 때문

 

 

 

요약

반응형
profile

개발은 재밌어야 한다

@ghyeong

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!