🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    미해결

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

23.03.22 16:16 작성 조회수 281

0

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

답변 1

답변을 작성해보세요.

0

안녕하십니까,

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

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

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

감사합니다.

채널톡 아이콘