Kafka 전달 보증

김석·2023년 5월 19일
0

Kafka

목록 보기
7/11

1. 전달 보증 수준

종류개요재전송 유뮤중복 삭제 유무비고
At Most Once1회는 전달을 시도 해본다XX메시지는 중복되지 않지만, 상실될 수도 있다.
At Least Once적어도 1회는 전달한다.OX메시지가 중복될 가능성은 있지만, 상실되지는 않는다.
Exactly Once1회만 전달한다.OO중복되거나 상실되지 않고 확실하게 메시지가 도달하지만, 성능이 나오기 힘들다.

2. Kafka에서 At Least Once 실현

2-1. Ack

  • broker가 메시지를 수신했을 때, producer에게 수신 완료했다는 응답.

2-2. Offset Commit

  • consumer가 수신한 메시지를 정상 처리했다면 처리(수신) 완료 기록을 broker에게 보내는 것.
  • Offset commit은 메시지를 받아 정상적으로 처리를 완료한 다음 offset을 업데이트함으로써 어딘가 잘못된 문제로 메시지를 재전송할 때 어디부터 재전송하면 되는지 판단할 수 있다.

데이터가 중복될 가능성이 있다. 따라서 애플리케이션에서 메시지 중복 처리가 필요함.


3. Kafka에서 Exactly Once 실현

  • 트랜잭션 개념을 도입하여 전달을 보증.
  • 쌍방간의 실현이 모두 필요한데, producer와 broker 상호 교환 사이, broker와 consumer 상호 교환 사이에서 필요함.
  • 오버헤드가 존재한다. 따라서 처리량 감소를 감수해야 함.

3-1. producer와 broker 사이

  • 양쪽 모두에서 시퀀스 번호를 관리해 중복되는 실행을 제거하는 방법을 사용.
  1. producer가 broker로 메시지 송신
  2. broker에서 받은 메시지 기록
  3. 특정 이유로 Ack가 반송 실패(메시지는 broker에 정상 기록됨)
  4. producer에서는 송신 실패로 판단, 메시지 재전송
  5. broker는 이미 받은 메시지로 판단, 기록하지 않음
  6. Ack가 정상적으로 producer에게 반환됨

-> 중복 메시지를 제거할 수 있다.

3-2. broker와 consumer 사이

  • kafka broker에는 트랜잭션의 범위를 해석하고, 트랜잭션 중단 시 중단까지의 처리를 파기하는 기능이 있음.
  1. 트랜잭션 시작
  2. consumer에서 메시지 수신
  3. 수신한 메시지 처리
  4. 처리 결과를 broker에 송신
  5. consumer에서 수신한 메시지의 offset을 commit
  6. 특정 이유로 트랜잭션 abort/timeout
  7. broker에서는 2-5 과정의 처리를 파기.

출처

사사키 도루, 『실전 아파치 카프카』, 정인식, 한빛미디어(2020)

profile
handsome

0개의 댓글