-
[Kafka] 프로듀서(Producer)Kafaka 2021. 7. 28. 08:54
전송 보장과 acks
- ack = 0
- 서버 응답을 기다리지 않음
- 전송 보장도 zero
- ack= 1
- 파티션의 리더에 저장되면 응답 받음
- 리더 장애시 메시지 유실 가능
- ack = all (또는 -1)
- 모든 리플리카에 저장되면 응답 받음
- 브로커 min.insync.replicas 설정에 따라 달라짐
- 모든 리플리카에 저장되면 응답 받음
실패 대응
- 재시도
- 재시도 가능한 에러는 재시도 처리
- 예 : 브로커 응답 타임 아웃, 일시적인 리더 없음 등
- 재시도 가능한 에러는 재시도 처리
- 재시도 위치
- 프로듀서는 자체적으로 브로커 전송 과정에서 에러가 발생하면 재시도 가능한 에러에 대해 재전송 시도 ⇒ retries 속성
- send() 메서드에서 익셉션 발생시 엑셥션 타입에 따라 send()재호출
- 콜백 메서드에서 익셉션 받으면 타입에 따라 send() 재호출
- 아주 아주 특별한 이유가 없다면 무한 재시도 x ⇒ 이 메시지를 계속 처리하면 다른 메시지가 밀림
- 기록
- 추후 처리 위해 기록
- 별도 파일, DB 등을 이용해서 실패한 메시지 기록
- 추후에 수동(또는 자동) 보정 작업 진행
- 기록 위치
- send() 메서드에서 익셉션 발생시
- send() 메서드에 전달한 콜백에서 익셉션 받는 경우
- send() 메서드가 리턴한 Future의 get()메서드에서 익셉션 발생시
- 추후 처리 위해 기록
⇒ enable.idempotence 속성을 이용하면 중복 가능성을 줄일 수 있음 (doc 참조)
⇒ enable.idempotence 속성을 이용하면 중복 가능성을 줄일 수 있음 (doc 참조)
https://www.youtube.com/watch?v=xqrIDHbGjOY kafka 조금 아는 척하기 1~3 (개발자용)
- ack = 0