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

정성훈님의 프로필 이미지
정성훈

작성한 질문수

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

Auto Commit 적용 시 Consumer의 중복 읽기 상황 발생 실습

두 번 종료해야 꺼지는 이유?

작성

·

283

0

wakeup()이 호출되지 않으면 종료되지 않고 다시 실행되는 이유가 무엇일까요..?

답변 1

0

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

안녕하십니까,

consumer는 main thread가 아니라 별도의 thread로 java client application에서 구동됩니다. 때문에 consumer를 정상적으로 종료 시키려면 명시적으로 consumer 객체의 close()를 호출해 줘야 합니다. 그렇지 않고 java application만 종료 시키면 consumer가 정상적으로 종료되지 않을 수 있습니다.

그런데 보통은 consumer가 무한 루프상에서 계속 데이터가 들어올것을 예상하며 poll()을 하고 있기 때문에 loop를 빠져나가서 consumer객체의 close()를 호출하기가 어렵습니다.

때문에 java application을 종료하기 전에 명시적으로 wakeup()을 호출해서 WakeUpException을 발생시켜서 catch finally 절에서 consumer객체의 close()를 호출하게 만들어 줍니다.

보다 자세한 사항은 이전 강의 영상인 Wakeup을 이용하여 Consumer를 효과적으로 종료하기 에서 설명드리고 있으니, 다시한번 참조해 보시면 좋을 것 같습니다.

감사합니다.

정성훈님의 프로필 이미지
정성훈

작성한 질문수

질문하기