BACKEND.*

Kafka Producer

초코푸딩 2022. 9. 29. 14:00

토픽에 메시지 전송

- 토픽, 키, 값

1. send 메소드를 이용해 레코드를 전달하면

2. Serializer을 이용해서 byte 배열로 변환하고

3. Partitioner을 통해 어느 토픽의 파티션으로 보낼지 결정한다. 

4. 변환된 메시지(byte 배열)를 버퍼에 저장한다. 배치로 묶어서 메시지를 저장.

5. sender가 배치를 브로커에게 전송

 

* Sender가 메시지를 보내는 동안 배치로 모음. 

* 별도 쓰레드로 동작하며 배치가 찼는지 여부에 상관없이 Sender는 차례대로 브로커에 전송


* 처리결과 Future과 Callback으로 확인


전송 보장과 ack

- ack = 0 

서버 응답을 기다리지 않음

전송 보장하지 않음

- ack = 1

파티션의 리더에 저장되면 응답받음 

리더 장애시 메시지 유실 가능

- ack = all (또는 -1)

모든 리플리카에 저장되면 응답받음

 


에러 유형

- 전송과정에서 실패

전송 타임 아웃(일시적인 네트워크 오류)
리더 다운에 의한 새 리더 선출 진행 중

브로커 설정 메시지 크기 한도 초과

- 전송전에 실패

직렬화 실패, 프로듀서 자체 요청 크기 제한 초과

프로듀서 버퍼가 차서 기다린 시간이 최대 대기 시간 초과

 

실패대응

1. 재시도 : 프로듀서는 자체적으로 브로커 전송 과정에서 에러가 발생하면 재시도 가능한 에러에 대해 재전송 시도

2. 기록 : 추후 처리 위해 기록

* 재시도시 메시지 중복 전송 가능성이 생김 : 브로커 응답이 늦게와서 재시도할 경우 중복 발송 가능

 

 

 

 

출처 : https://www.youtube.com/watch?v=geMtm17ofPY