Learn Kafka

Choi Yeongjun·2021년 4월 15일
0
post-custom-banner

Learn Kafka

kafka broker

실행된 카프카 애플리케이션 서버 중 1대

3대 이상의 브로커로 클러스터 구성

주키퍼와 연동 (~2.5.0 버전)

  • 주키퍼의 역할: 메타데이터(broker id, controller id, etc) 저장

n개의 브로커중 1대는 컨트롤러 (Controller) 기능 수행

  • 컨트롤러: 각 블로커에게 담당 파티션 할당 수행. 브로커 정상 동작 모니터링 관리, 누가 컨트롤러 인지는 주키퍼에 저장

Record

new ProducerRecord<String, String>("totpic", "key", "message");
ConsumerRecords<String, String> records = consumer.poll(1000);
for (ConsumerRecord<String, String) record: recrods){ ... }

객체를 프로듀서에서 컨슈머로 전달하기 위해 Kafka 내부에 byte 형태로 저장할 수 있도록 직렬화/역직렬화하여 사용

Topic & Partition

메시지분류단위

n개의 파티션 할당 기능

각 파티션마다 고유한 오프셋을 가짐

메시지 처리순서는 파티션 별로 유지 관리됌.

Producer & Consumer

../_images/log_consumer.png

프로듀서는 레코드를 생성하여 브로커로 전송

전송된 레코드는 파티션에 신규 오프셋과 함께 기록됌

컨슈머는 브로커로 부터 레코드를 요청하여 가져감(polling)

Kafka Log and segemnt

실제로 메세지가 저장되는 파일 시스템 단위

세그먼트는 시간 또는 크기 기준으로 닫힘

세그먼트가 닫힌 이후 일정 시간 (또는 용량)에 따라 삭제 또는 압축(compact)됌

토픽 내 파티션 갯수와 컨슈머의 관계

  • 토픽 내 파티션이 3개, 컨슈머가 1대일 때

    • 하나의 컨슈머에서 해당 토픽의 모든 파티션을 polling
  • 토픽 내 파티션이 3개, 컨슈머가 3대 일 때

    • 하나의 컨슈머가 하나의 파티션을 polling
  • 토픽 내 파티션이 3개 , 컨슈머가 4대 혹은 그 이상일떄

    • 컨슈머 1대 혹은 그 이상이 idle 상태

이는 모두 컨슈머 그룹이 한개일떄를 가정

../_images/consumer-groups.png

컨슈머 그룹이 두개일 경우 서로 다르게 처리할 수 있음.

  • 데이터가 재처리되야한다면 컨슈머 그룹을 하나 더 만들어서 처리하기도 함

    • 이때 기존컨슈머는 유지
  • coupling을 줄이는 용도로도 사용

    • 가령 컨슈머 그룹 A와 컨슈머 그룹 B 가 있을 경우 각 컨슈머 그룹간의 간섭이 없음

ISR (In Sync Replica),리더와 팔로워의 싱크

Hands-free Kafka Replication: A lesson in operational simplicity - Confluent

토픽 생성 시 replication옵션을 추가하면 각 브로커에 replica 들이 생성됨

이 때 파티션이 생성되고 주로 사용되는 파티션을 리더파티션, 리플리카 파티션들을 팔로워 파티션이라고 함

특정 파티션의 리더, 팔로워의 레코드가 모두 복제되어 sync 가 맞는 상태 => ISR (In-Sync Replica)

ISR 이 아닌 상태에서 장애가 나면 => unclean.leader.election.enable (기본은 false으로 되어있음)

  • 만약 이를 활성화 시키지 않고 리터 파티션 혹은 브로커에 장애가 나면 팔로워 파티션들에서 리더 파티션으로 선출되는 과정이 진행되지 않음 , 결국 fail over 되지 않고 리퍼 파티션의 복구를 무기한 대기
  • 다만 레코드를 유실하고 진행하고 failover시키려면 켜도됌.

Kafka 핵심 요소 용어 정리

  • Broker: 카프카 애플리케이션 서버 단위
  • Topic: 데이터 분리 단위, 다수 파티션 보유
  • Partition: 레코드를 담고 있음. 컨슈머 요청 시 레코드 전달
  • Offset: 각 레코드당 파티션에 /할당된 고유 번호
  • Consumer: 레코드를 polling 하는 애플리케이션
    • Consumer gorup : 다수 컨슈머 묵음
    • Consumer offset : 특정 컨슈머가 가져간 레코드의 번호
  • Produer : 레코드를 브로커로 전송하는 애플리케이션
  • Replication : 파티션 복제 기능
  • ISR: 리더 + 팔로워 타티션의 sync가 된 묶음
  • Rack-awarenss : Server Rack 이슈에 대응
profile
Be Right Developer
post-custom-banner

0개의 댓글