Apache Kafka 주요 요소3

홍기대·2022년 3월 21일
0

Kafka

목록 보기
3/5

🔶 Producer

🚩Message(Record) 구조 - Header, Key, Value


#Producer Sample Code(Serializer)
#Key와 Value용 Serializer를 각각 설정

private Proerties props = new Prolerties();

props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "broker101:9092, broker102:9092");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, org.apache.kafka.commom.serializtion.StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, io.confluent.kafka.serializers.KafkaAvroSerializer.class);

KafkaProducer producer = new KafkaProducer(props);

🚩 Partitioner

  • 메시지를 Topic의 어떤 Partition으로 보낼지 결정한다
  • 전제 조건은 Key가 null이 아니어야 한다

Apache Kafka Producer Improvement with the Sticky Partitioner*

  • Kafka2.4 이전의 DefaultParitioner는 Round Robin 정책으로 동작
  • Kafka2.4 이후의 DefaultParitioner는 Sticky 정책으로 동작 하나의 Batch가 닫힐 때까지 하나의 partition에게 record를 보내고 랜덤으로 Partition을 선택하는 방식으로 동작

🔶 Consumer

  • Consumer는 각각 고유의 속도로 Commit Log로 부터 순서대로 Read(Poll)를 수행
  • 다른 Consumer Group에 속한 Consumer들은 서로 관련이 없으며, Commit Log에 있는 Event(Message)를 동시에 다른 위치에서 Read 할 수있음
  • Consumer는 자동이나 수동으로 데이터를 읽은 위치를 commit하여 다시 읽음을 방지
  • __consumer_offset이라는 Internal Topic에서 Consumer Offset을 저장하여 관리

🚩 Consuming as a Group

  • 4개의 파티션이 있는 Topic을 consume하는 4개의 Consumer가 하나의 Consumer Group에 있다면, 각 Consumer는 정확히 하나의 Partition에서 Record를 consume함
  • Parition은 항상 Consumer Group내의 하나의 Consumer에 의해서만 사용됨
  • Consumer는 주어진 Topic에서 0개 이상의 많은 Partition을 사용할 수 있음

Consumer Rebalancing

  • Consumer Group에 속해 있는 Consumer가 죽는 경우, 그 그룹에 속해 있는 Consumer들은 Parition을 분해하여 consume함
  • Partition은 항상 Consumer Group내의 하나의 Consumer에 의해서만 사용
  • Consumer는 주어진 Topic에서 0개 이상의 많은 Partition을 사용할 수 있음

🚩 Multi Consumer Group

  • 동일한 group.id로 구성된 모든 Consumer들은 하나의 Consumer Group을 형성
  • Consumer Group의 Consumer들은 작업량을 어느 정도 균등하게 분할함
  • 동일한 Topic에서 consume하는 여러 Consumer Group이 있을 수 있음
  • 다른 Consumer Group의 Consumer들은 분리되어 독립적으로 작동
profile
열심히 살자

0개의 댓글