TIL

2025.02.24 spring kafka Throttling

Gisungcu 2025. 2. 24. 22:57

 

 

카프카 컨슈머에 동적 쓰로틀링 적용하기 | 우아한형제들 기술블로그

이 글은 카프카(Kafka)를 사용하는 스프링 환경에서 메시지 처리 속도를 동적으로 조절해야하는 상황과 여러 쓰로틀링 기법들을 소개합니다. 카프카를 사용하는 스프링 프레임워크 환경에 익숙

techblog.woowahan.com

 

마침 비슷한 상황에서 글을 읽게 되었다.

spring kafka에서는 레코드 리스너와 배치 리스너를 제공하는데, 디폴트는 레코드 리스너이다.

ackmode에서도 record와 batch가 있는데, 리스너들과 어떻게 엮이냐에 따라 동작이 다르다.

ackmode는 언제 커밋하겠다는 의미이다. 디폴트인 batch는 max-poll-records만큼 다 소비하고 커밋하겠다는 거고, record는 max-poll-records를 레코드 별로 하나하나 커밋하겠다는 것이다.

레코드 리스너는 max-poll-records만큼 poll 하고 하나하나 처리하는 것이고 배치리스너는 max-poll-records만큼 poll 하고 한 번에 처리하겠다는 것이다.

그래서 max-poll-records이 같다면 성능상에서는 배치 리스너가 낫다.

 

ackMode\리스너 레코드 리스너 배치 리스너
레코드 max-poll-records만큼 읽어와서 하나하나 소비하며 하나하나 커밋한다 max-poll-records만큼 읽어와서 record별로 커밋될 일이 없고 모두 소비하고 커밋된다.
배치 max-poll-records만큼 읽어와서 다 소비한 후에 커밋한다. max-poll-records만큼 읽어와서 다 소비 후에 커밋한다.