• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Kafka 6
        2023년 09월 25일
        • starryeye
        • 작성자
        • 2023.09.25.:41

        공부한 개념을 한 문장씩 쭉 세워본다.

         

        멱등성 프로듀서..

        멱등성 프로듀서는 동일한 데이터를 여러번 전송하더라도

        카프카 클러스터에 한번만 저장됨을 보장하는 프로듀서이다.

         

        기본 프로듀서는 적어도 한번 전달됨을 보장한다. (At least once)

        그래서 카프카 클러스터에 중복 적재될 수 있다는 말이다.

         

        예를 들면, 프로듀서가 send 를 통해 데이터를 브로커로 전달하고,

        브로커는 정상 적재를 하였으나..

        모종의 이유로 브로커가 프로듀서로, 적재 완료 응답메시지가 정상 전달되지 않아서

        프로듀서는 데이터를 재전송하게되는 상황이 있다.

        하지만, 이러한 상황은 극히 드문 상황이므로 두려워하지 않아도 된다.

         

        멱등성 프로듀서 동작 방식..

        멱등성 프로듀서는 데이터를 브로커로 전달할 때

        프로듀서의 고유 ID(PID), 레코드의 전달 고유 넘버인 시퀀스 넘버(SID) 를 같이 전달한다.

        해당 값들로 브로커는 데이터의 중복 적재를 판단할 수 있다.

         

        PID, SID 로 중복을 판단하기 때문에 한계점이 있다.

        프로듀서가 재시작 되면 PID 가 바뀌므로 멱등성이 보장되지 않는 구간이 생길 수 있다.

         

        멱등성 프로듀서는 SID 를 0부터 시작하여 1씩 증가시킨 값으로 사용한다.

        브로커는 데이터를 하나씩 확인하며 SID 가 정상적으로 1씩 증가 되는지를 확인한다.

        SID 가 예상한 값이 아닐 경우 브로커는 OutOfOrderSequenceException 예외를 프로듀서에게 응답으로 전달한다.

        순서가 중요할 경우.. 이에 대한 처리를 프로듀서에서 해야하는 것을 고려해야한다.

         

        멱등성 프로듀서 설정..

        중복 적재를 막기 위해 프로듀서의 enable.idempotence 옵션을 true 로 하면

        정확히 한번만 적재할 수 있다. (기본 값은 false 이다.)

        이렇게 설정하면 멱등성 프로듀서라 부른다.

         

        카프카 3.0.0 부터는 enable.idempotence 옵션의 기본 값이 true 이다.

        (acks = all)

         

        enable.idempotence 옵션을 true 로 설정하면 강제 설정되는 옵션이 있다.

        - acks = all

        0일 경우엔 적재여부를 확인하지도 않는 것이므로 acks 는 멱등성과 관련이 깊다.

        - retries = Integer.MAX_VALUE

        해당 옵션이 기본 프로듀서(최소 1회 적재 보장) 에서도 기본 값이다.

        1회 이상 적재를 보장 하려면 재시도 횟수는 거의 무한이 정당하다.

         

        acks 옵션이 all, retries 옵션이 거의 무한 으로 된다는 것은..

        각각 처리속도가 느려지고, 브로커에 부하가 생길 수 있다는 것이다.

        따라서 정말로 멱등성 프로듀서가 필요한가에 대해 고민을 충분히 해야한다.

         

         

         

        'Message Broker' 카테고리의 다른 글

        Kafka 5  (0) 2023.08.27
        Kafka 4  (0) 2023.08.27
        Kafka 3  (0) 2023.08.18
        Kafka 2  (0) 2023.08.16
        Kafka 1  (0) 2023.08.16
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바