Oh My Algorithm
Concept Guideacks=0/1/all · 내구성

프로듀서와 acks (Producer & acks)

프로듀서는 보낸 메시지가 어디까지 저장됐을 때 '성공'으로 칠지 고를 수 있습니다. acks=0 은 응답을 기다리지 않아 가장 빠르지만 브로커가 받았는지도 모르고, acks=1 은 리더만 저장하면 성공이라 리더가 죽으면 잃을 수 있으며, acks=all 은 복제본까지 저장돼야 성공이라 가장 안전하고 가장 느립니다.

01프로듀서와 acks (Producer & acks)

acks=0 · 확인하지 않는다

acks=0 은 메시지를 보내고 곧바로 다음 일을 합니다. 응답을 아예 기다리지 않습니다.

브로커가 받았는지, 디스크에 썼는지 프로듀서는 알지 못합니다. 돌아오는 화살표가 없습니다.

네트워크가 끊겨 메시지가 사라져도 프로듀서 쪽에는 아무 표시가 없습니다. 재전송할 근거조차 없습니다.

Produceracks=0Broker 1LeaderBroker 2FollowerBroker 3M
1 / 3

정리

가장 빠르지만 가장 위험합니다. 조금 잃어도 되는 지표·로그 수집에나 씁니다.

acks=1 · 리더만 확인한다

acks=1 은 리더 브로커가 자기 로그에 썼다는 응답까지 기다립니다.

리더가 응답하면 프로듀서는 성공으로 처리하고 다음 메시지로 넘어갑니다. 응답이 리더에서 바로 돌아옵니다.

문제는 이 시점에 팔로워들이 아직 복제를 못 했을 수 있다는 것입니다. 복제는 뒤에서 따라옵니다.

이때 리더가 죽으면 팔로워 중 하나가 새 리더가 되는데, 그 메시지는 어디에도 없습니다.

Produceracks=1Broker 1LeaderBroker 2FollowerBroker 3M
1 / 4

정리

대부분의 경우 충분하지만, 리더 장애와 겹치면 잃습니다. 속도와 안전의 중간값입니다.

acks=all · 복제본까지 확인한다

acks=all 은 리더뿐 아니라 따라잡은 복제본(ISR)까지 저장돼야 성공으로 칩니다.

리더가 쓰고, 팔로워들이 그 메시지를 복제해 갑니다. 여기까지 끝나야 다음으로 갑니다.

복제까지 끝난 뒤에야 프로듀서에게 성공 응답이 갑니다. 왕복이 하나 늘어난 만큼 느립니다.

이제 리더가 죽어도 그 메시지를 가진 팔로워가 새 리더가 되므로 잃지 않습니다.

Produceracks=allBroker 1LeaderBroker 2FollowerBroker 3M
1 / 4

정리

가장 안전하고 가장 느립니다. 결제·주문처럼 잃으면 안 되는 데이터에 씁니다.

02 쉽게 이해하기

For Everyone
🔑핵심 동작

acks 는 무엇까지 끝나야 성공으로 칠지를 정합니다. 0 은 응답을 기다리지 않고, 1 은 리더가 쓸 때까지, all 은 따라잡은 복제본까지 저장될 때까지 기다립니다.

💡쉽게 말하면

acks 는 '언제 성공이라고 답할지'를 정하는 값입니다.

0 은 응답 자체를 안 기다리므로 네트워크가 끊겨도 모릅니다.

1 은 리더 브로커의 저장까지만 확인하므로, 팔로워가 복제하기 전에 리더가 죽으면 그 메시지는 사라집니다.

all 은 ISR(따라잡은 복제본)까지 저장돼야 응답하므로 브로커 하나가 죽어도 남습니다.

속도와 안전 중 무엇을 살지 데이터 성격에 맞춰 고릅니다.

📍어디에 쓰나
  • 로그·메트릭처럼 조금 잃어도 되는 데이터와 결제처럼 잃으면 안 되는 데이터의 설정 분리
  • 처리량·지연·내구성 트레이드오프 조정

03 자주 묻는 질문

FAQ
프로듀서와 acks (Producer & acks)란 무엇인가요?+

프로듀서는 보낸 메시지가 어디까지 저장됐을 때 '성공'으로 칠지 고를 수 있습니다. acks=0 은 응답을 기다리지 않아 가장 빠르지만 브로커가 받았는지도 모르고, acks=1 은 리더만 저장하면 성공이라 리더가 죽으면 잃을 수 있으며, acks=all 은 복제본까지 저장돼야 성공이라 가장 안전하고 가장 느립니다.

프로듀서와 acks (Producer & acks)은(는) 어디에 사용하나요?+

로그·메트릭처럼 조금 잃어도 되는 데이터와 결제처럼 잃으면 안 되는 데이터의 설정 분리, 처리량·지연·내구성 트레이드오프 조정

프로듀서와 acks (Producer & acks)를 쉽게 비유하면?+

acks 는 무엇까지 끝나야 성공으로 칠지를 정합니다. 0 은 응답을 기다리지 않고, 1 은 리더가 쓸 때까지, all 은 따라잡은 복제본까지 저장될 때까지 기다립니다.