ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kafka 심화 개념 - 2
    데엔 공부 2024. 12. 13. 13:14

    2-6. Cooperative Sticky Asignor

     

    시간 흐름에 따른 Consumer Rebalance 과정

     

    Eager Rebalance 프로토콜

    : 최대한 단순하게 유지하기 위해 만들어짐

     

    Incremental Cooperative Rebalancing Protocol

    : Eager Rebalancing 프로토콜 보다 발전한 방식

    > Revoke 파티션만 Revoke 처리하고 새로 할당할 것만 해주기

    > 이상적인 Consumer Rebalancing 프로토콜

    > Rebalancing 수행

    > 1st rebalance에서 Consumer 자신의 파티션 어느 것이 다른 곳으로 재할당되어야 하는지 알게

    > Apache Kafka 2.5에서 추가됨

    > 빈번하게 리밸런싱되거나 스케일 /아웃으로 인한 다운타임 우려 2.5 이상 기반으로 권장

    (2.4까지는 Basic Rebalancing Protocol 사용하게 )

     

    2-7. Kafka Log File

    Kafka Log Segment File = Data File

    Segment File 생성 위치 > server.properties 파일 log.dirs 파라미터로 정의

    (, 구분하여 여러 디렉토리 지정 가능)

    토픽과 파티션은 log.dirs 아래에 하위 디렉토리로 구성

     

    Log file 파일명에 의미 있음 (숫자로 offset 범위 나타냄)

     

    파티션 디렉토리 생성되는 files type (4가지)

    > .log : Log Segment File, 전송된 메시지와 메타데이터

    > .index : 메시지의 offset log Segment 파일의 byte 위치 매핑

    > .timeindex : 메시지의 타임스탬프 기반으로 메시지 검색 사용

    > leader-epoch-checkpoint : Leader Epoch 관련 Offset정보 저장

     

    특별한 Producer 파라미터 사용 생성되는 files type

    > .snapshot : idempotent Producer 사용

    > .txnindex : Transactional Producer 사용

     

    Log Segment File 특징

    > 첫번째로 저장되는 메시지의 Offset 파일명이

    > 여러 파라미터 존재

    밑의 __consumer_offset 별도로 관리함

     

    Checkpoint file

    > 브로커에는 2개의 Checkpoint file

    > log.dirs 디렉토리에 존재

     

    2-8. Exactly Once Sementics(EOS)

     

    Delivery Semantics: 전송 방식

    > At-Most-Once Semantics (최대 acks=1)

    > At-Least-Once Semantics (최소 , acks=all)

    > Exactly-Once Semantics(정확히 )

     

    EOS 필요성

    > 중복 메시지로 인한 중복처리 방지

    > 데이터가 정확히 한번 처리되도록 보장하는 실시간 미션 크리티컬 스트리밍 애플리케이션

    > 클라이언트(Idmpotent producer)에서 생성되는 중복 메시지 방지

    > Transaction 기능 사용하여 하나의 트랜잭션 내의 모든 메시지가 모두 Write되었는지 또는 write 되었는지 확인(Atomic Message)

    > Apache Kafka 0.11.0 이후부터 사용가능

    > Java 클라이언트에서만 Fully Supported

     

    Transaction Coordinator 사용

    > 특별한 Transaction Log 관리하는 Broker Thread

    > 일련의 ID 번호(Producer ID, Sequence Number, Transaction ID) 할당하고 클라이언트가 정보를 메시지 헤더에 포함하여 메시지를 고유하게 식별

    > Sequence Number: 브로커가 중복된 메시지 스킵하게

     

    EOS 관련 파라미터

     

    Idempotent Prodcucer 메시지 전송 프로세스

    > 프로듀서는 고유한 Producer Id 사용하여 메시지 송신

    > Broker 메모리에 map {Producer ID: Sequence Number} 저장

    > Broker Ack 받지 못하면 Producer 재시도 수행 - Broker 체크하여 메시지 중복 확인

     

    2-9. Exactly Once Sementics(EOS) 2

     

    Transaction 구현하기 위해 새로운 핵심 개념 도입

    > Transaction Coordinator

    > Transaction Log: 새로운 Internal Kafka Topic

    > TransactionalId: Producer 고유하게 식별하기 위해 사용되는 ID

     

    Broker Configs

     

    Consumer Configs

     

    KIP-98 : Exactly Once Delivery And Transactional Messaging

    > Transaction Data flow 관련 예제, Consume하고 Produce하는 과정을 Transaction으로 처리

    > poll source topic에서 record 가져옴

    > transaction 시작

    > record 비즈니스 로직 수행 결과 record Target Topic으로 send

    > sendOffsetsToTransaction 호출하여 consume(poll) Source Topic Consumer Offset Commit

    > 트랜잭션 커밋 or 롤백 수행

    1. initTransactions 시작

    2. Producer ID 얻기

    3. Transaction 시작

    4.1. AddPartitionsToTxnRequest

    4.2. ProduceRequest

    4.3. AddOffsetCommitsToTxnRequest

    4.4. TxnOffsetCommitRequest

    5.1. EndTxnRequest

    5.2. WriteTxnMarkerRequest

    5.3. Write the final Commit or Abort message

     

    '데엔 공부' 카테고리의 다른 글

    Kafka 심화 개념 - 4  (2) 2024.12.15
    Kafka 심화 개념 - 3  (2) 2024.12.14
    Kafka 심화개념 - 1  (2) 2024.11.27
    Apache Kafka 개념 정리  (2) 2024.11.25
Designed by Tistory.