inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

카프카 완벽 가이드 - 코어편

idempotence(멱등성) 기반 중복 없이 전송 이해

프로듀서 전송과 ack 관계에 대해 질문있습니다.

해결된 질문

203

이무

작성한 질문수 58

0

안녕하세요,

 

프로듀서 전송 부분에 대해 강의를 듣던 중 궁금한 점이 있습니다.

최대 한 번 전송 외에는 ack를 받고 다음 메시지를 전송한다고 설명하셨는데, 비동기 전송은 ack와 상관 없이 지속적으로 메시지를 전송할 수 있는거 아닌가요?

 

메시지 a,b,c 3개를 보낸다고 했을 때

ack = 0의 경우는

a,b,c를 보내고 오는 ack에 대해 신경 쓰지 않는것이고,

ack != 0의 경우 비동기라면 마찬가지로 전송은 ack 여부와 상관 없이 a,b,c를 보내고 대신 ack 여부에 따라 특정 메시지에 대한 재전송이 이루어 지는 것이 아닌지 궁금합니다.

즉, ack 여부에 따라 a이후 b를 전송하는 것이 결정되는게 맞는지 궁금합니다.

 

 

 

 

 

 

 

kafka 데이터-엔지니어링

답변 1

0

권 철민

안녕하십니까,

네, 말씀하신 부분이 맞습니다. 좀 더 명확히 설명드리자면,

sync 방식, 즉 producer.send().get() 과 async 방식(callback 적용)에 따라 acks=0/1 이 살짝 달라지는 부분이 있습니다.

강의에서 설명드리는 부분은 sync 방식에서 acks 적용이라고 보시면 될 것 같습니다.

먼저 sync 방식은 send()가 return받는 future 객체가 만들어져서 get()이 반환될때까지 wait가 되면서 순차적인 동기 방식을 유지하게 되는데, 이게 acks=0 일 경우는 get() 이 broker로 부터 ack를 기다리지 않고 바로 반환이 됩니다. 순차적으로는 보내는데, acks를 기다리지 않고 보내기 때문에 해당 메시지가 유실될 수 있습니다.

sync 방식에서 acks=1 이면 acks가 와서 get()이 반환될 때까지 기다리게 됩니다. acks가 일정 기간동안 오지 않으면 다시 해당 메시지를 보내게 됩니다.

async 방식에서 acks=0은 sync 방식과 거의 동일합니다. 다만 acks를 받으면 Callback이 수행된다는 점만 다릅니다.

async 방식에서 acks=1은 조금 헷갈리는 부분이 있습니다. async 방식에서 acks=1 인 경우는, 이전 메시지의 acks를 받지 않았지만, 다음 메시지를 보낼 수 있습니다. 즉 비 순차적으로 메시지를 보낼 수 있습니다. 하지만 이전 메시지의 acks가 특정 기간동안 오지 않는다면 해당 메시지를 다시 보냅니다. 때문에 중복이 발생할 가능성이 있습니다.

강의에서는 acks=1인 경우는 sync 방식으로 보낸 설명으로 생각해 주시면 될 것 같습니다. async 방식의 경우는 메시지를 보내고, acks를 기다리지 않고, 다음 메시지를 보내지만, acks가 오지 않는 경우 해당 메시지를 다시 보내게 됩니다.

생각해 보니, 이 설명을 원래 강의 기획에서는 하려고 했었는데, 어쩌다 보니 빠진 것 같군요. 아마 이 설명을 하면 수강생 분들이 많이 헷갈릴 것 같아서 쉽게 결정을 못하다가 잊어버리고 넘어간 것 같습니다.

좋은 질문 감사합니다.

0

이무

넵 답변 감사합니다!

virtual box 설치 문제

0

62

2

카프카 서버 구축 관련 문의

0

67

2

카프카 토픽 Key 타입 변경에 관한 질문

0

70

2

Zookeeper에서 KRaft

0

78

1

카프카 학습과 관련하여 질문 드립니다

0

98

2

파티션 증가시 비용 증가 고려

0

72

2

Kafka 초기 Partition 개수 설정 관련 질문

0

83

2

VM 과 도커의 차이

0

139

2

vm 어댑터설정 문의

0

78

2

Cooperative Sticky Rebalancing 질문

0

58

2

consumer 설정 질문

0

68

2

consumer.poll 질문입니다.

1

69

2

mainThread.join() 관련 질문

0

57

2

문의

0

153

2

멀티 브로커 설정 중 포트 충돌 발생

0

120

2

Consumer Group 강의 Lag 질문있습니다!

0

107

2

강의 설명 및 코드 정리

0

174

2

실습 코드는 어디서 받나요.. 아무리 찾아도 엄네요..

0

151

1

java.nio.BufferUnderflowException 에러 발생합니다..

0

158

3

KafkaTimeoutError:

0

157

2

acks 1 이면 비동기가 아니지 않나요?!

0

185

2

Producer의 메시지 비동기화 전송 구현 강좌 내용 중 질문

0

109

2

자문자답: 데이터 누락된다고 하시는 분 참고하세요.

0

216

2

자문자답: kafka Error connecting to node utuntu-20.myguest.virtualbox.org:9092

0

203

2