pruducer는 topic의 partition의 leader broker에게만 메시지를 전송 -> 이를 나머지 브로커에게 나누어 주면서 복제....
acks가 0 인 경우
- producer는 leader broker가 보내는 ack 메시지가 오지 않아도 계속 메시지를 보낸다.
- 즉, 확인을 받지 않으니, broker가 메시지를 못 받았어도 재전송을 안한다.
- 그래서, 데이터 손실에 민감하지 않은 경우에 사용.
- 손실 우려가 존재하나 빠르다.
props.setProperty(ProducerConfig.ACKS_CONFIG , "0");
acks가 1 인 경우
- producer는 leader broker가 보내는 ack메시지 확인후, 다음 메시지 전송.
- 만약 leader broker에게서 error를 받는다면, 재전송.
- leader에 의해서 follower들이 모두 복제를 했는지는 확인 안함
- 즉, leader만 ack 정상인지 확인.
- 단, leader에게 오류 발생한다면, follower들이 제대로 복제했는지 확인 못했으니 메시지 손실 가능성 존재
acks가 all 인 경우
- 기본적으로는 all이다.
- 메시지 손실 우려가 없음. 대신에 속도가 느리다.
- min.insync.replicas 만큼 복제를하고 ack메시지를 보냄.
callback의 async형식인 경우는?
- ack를 바탕으로 retry가 수행
- 대신에 producer가 send한 순서와 broker에 저장되는 message의 순서가 변경될 수 있음
'리눅스 > kafka' 카테고리의 다른 글
| kafka consumer 구현 - 01 (0) | 2024.10.16 |
|---|---|
| kafka 배치 단위 message 전송 (0) | 2024.10.16 |
| kafka producer 구현 - 06 ( pizza message 전송 ) (0) | 2024.10.15 |
| kafka producer 구현 - 05 ( callback 구현) (0) | 2024.10.15 |
| kafka producer 구현 - 04 ( key값을 가지는 메시지 전송 , key를 integer로 보내기) (0) | 2024.10.14 |