인프런 커뮤니티 질문&답변

김기현님의 프로필 이미지
김기현

작성한 질문수

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

Consumer 파티션 할당 전략 실습 - Cooperative Sticky 방식 할당 실습

특정 메시지까지만 커밋이 가능할까요?

작성

·

327

0

안녕하세요~ 강의 항상 잘듣고있습니다ㅎㅎ
배치사이즈를 작게하면 성능이 낮아지고
배치사이즈를 크게하면 ack유실시 중복처리가 많아져서
배치사이즈를 크게하고
ack(commit)을 전체가 아닌 일부분만 할 수 없을까? 생각하게되었어요.
예를들어서 1000개 배치로 가져오고
10개까지 commit, 100개까지커밋, ....
요런것도 가능할려나요?.?

답변 1

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

잘 듣고 계시다니 저도 기쁩니다.

음, 아무래도 배치가 처리 단위다 보니, 배치 레벨로 읽어 들이기 때문에 읽어 들인 단위로 Commit을 해야 합니다. 그렇지 않고 fetcher가 읽어 들인 데이터가 1000건인데 이걸 commit을 10건을 하게 되면 fetch는 나머지 990건을 다 commit 할때 까지 기다리거나, 최악의 경우 990건을 버리고 어디까지 commit 되었는지 브로커로 다시 가서 __consumer_offsets을 뒤져서 다시 데이터를 가져와야 합니다. 이 경우 성능이 굉장히 저하됨은 물론, consumer 정합성 처리가 더 어렵게 되기 쉽습니다.

배치 성능은 높이고 싶지만, ack 유실을 최소화 하고자 한다면 배치 크기를 어쩔수 없이 적정한 수준에서 정해야 합니다.

감사합니다.

김기현님의 프로필 이미지
김기현

작성한 질문수

질문하기