콘텐츠로 바로가기

Backpressure Pattern

소비자가 처리 가능한 속도보다 생산자가 빠를 때 소비자가 생산 속도를 제어하는 메커니즘. 버퍼 폭발과 OOM을 방지. 생산자 >> 소비자 속도 차이 → 무한 큐 성장 → 메모리 고갈 또는 지연 폭증. Java의 `Flow` API, Project Reactor, ...

sys.entry
M

Me

hyunyoun's Blog

software-engineering-devops1 min read

Backpressure Pattern

소비자가 처리 가능한 속도보다 생산자가 빠를 때 소비자가 생산 속도를 제어하는 메커니즘. 버퍼 폭발과 OOM을 방지.

핵심 문제

생산자 >> 소비자 속도 차이 → 무한 큐 성장 → 메모리 고갈 또는 지연 폭증.

세 가지 전략

전략 동작 적합한 경우
Drop 초과 메시지 버림 손실 허용 스트림(센서 데이터)
Buffer 제한 크기 큐에 적재 일시적 버스트 흡수
Throttle 생산자 속도 제한 생산자가 속도 조절 가능한 경우

Reactive Streams 표준

Java의 Flow API, Project Reactor, RxJava가 구현:

CODE
Publisher --onNext()--> Subscriber
Subscriber --request(n)--> Publisher  ← demand signal (backpressure)

request(n): 소비자가 처리 가능한 n개만 요청 → pull 기반 흐름 제어.

실제 적용

  • Kafka Consumer: max.poll.records로 배치 크기 제한
  • TCP: 수신 버퍼 크기가 backpressure 신호 역할
  • HTTP/2: WINDOW_UPDATE 프레임으로 흐름 제어

연결 노트