본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://bit.ly/4hTSJNB


I. 학습 인증샷 4장 이상 포함

1. 공부시작: 날짜, 시각 다 나오도록

공부 시작

2. 공부 종료: 날짜 시각 다 나오도록

공부 종료

3. 1개 클립 수강 (강의장 목록 캡쳐, 수강화면이 보이지 않도록) 1장

 

클립20 .. EOS

4. 학습 인증샷 1장(필기 촬영이나 작업물 촬영)

AMO -> ALO -> EOS


II. 학습 후기 700자 이상 (공백 제외)

 Exactly Once Semantics(EOS)에 대한 설명이다. 2개로 나누어져 있는 것 같다.

요약

 Delivery Semantics

  • 최대 한번(At-Most-Once)
    •  메시지 전송 실패 시 재시도하지 않음
    • 데이터 유실 가능성 존재
  • 최소 한번(At-Least-Once)
    • ack가 시간 초과되거나 오류 수신시 메시지가 토픽에 기록되지 않는다고 가정하고
      메시지 전송을 다시 시도할 수 있음
    •  ACK 미수신 시 재전송으로 인한 중복 데이터 발생 가능성 존재
  • 정확히 한번(Exactly-Once)
    •   중복과 유실을 동시에 방지**

EOS 구현 핵심 요소

  • Idempotent Producer
    • `enable.idempotence=true` 설정으로 메시지 고유 식별(Producer ID + Sequence Number)
    • 브로커는 중복 메시지 감지 시 DUP 응답으로 중복 저장 방지
  • Transaction
    • `transactional.id` 설정과 트랜잭션 API 사용
    • Consumer는 `isolation.level=read_committed`로 커밋된 메시지만 수신
  • 주요 사용 사례
    • 금융 거래(송금/결제)
    • 광고 조회수 기반 과금
    • 서비스 간 정산 데이터 전송

와 벽느낀다...

  • Apache Kafka의 Exactly Once Semantics의 기본 설명인데.. 존나 어려움
  • PDF자료는 너무 좋다 는 3가지 방법에 대해 모두 설명하고 있어서 개념은 이해했다.
  • Idempotent Producer와 Transaction의 조합인데... 여기서부터 어렵다
    • Kafka의 Idempotent Producer는 메시지가 중복으로 처리되는 것을 방지하여
       “정확히 한 번만” 메시지를 브로커에 기록하도록 보장하는 기능이다.
      • 각 프로듀서는 고유한 Producer ID (PID)를 부여받고
      • 메시지마다 순차적으로 증가하는 Sequence Number가 포함된다.
      • 브로커는 PID와 Sequence Number를 기반으로 메시지를 추적하며 중복된 메시지를 무시한다
    • Kafka에서 트랜잭션은 여러 메시지를 하나의 작업 단위로 묶어 원자적(Atomic)으로 처리하는 DB 트랜잭션과 비슷한 개념이다.
      • Producer는 `transactional.id`를 설정하여 고유한 트랜잭션을 식별한다..
      • 프로듀서는 Transaction API를 사용해서 개발한다. (현재는 개념 설명이라서 그런지 구체적인 API는 설명하지 않고 있다.)
      • 컨슈머는  `isolation.level`를 `read_committed`(커밋된 메시지만 읽음)으로 설정한다.
  • ACK를 못받으면?
    • 프로듀서는 재시도를 수행한다 
    • `enable.idempotence=true` 설정하지 않으면 브로커의 중복 수신이 되어버렸을 것.
    • `enable.idempotence=true` 설정하였으므로 브로커가 체크하여 메시지가 중복된 것을 확인한다
    • 메시지를 저장하지 않는다(파티션 기록 x)
    • 프로듀서에게 DUP Response를 리턴한다.
블로그 이미지

감동맨

rkaehdaos의 블로그

,