카프카 6

mohadang·2023년 9월 17일
0

Road to Backend

목록 보기
14/21
post-thumbnail

리밸런스

컨슈머 그룹의 파티션 소유권이 변경될 때 일어나는 현상.

  • 컨슈머와 파티션 할당 변경.

리밸런스를 하는 동안 일시적으로 메시지를 가져올 수 없으며 리밸런스 발생시 데이터 유실/중복 발생 가능성 있음.

  • commitSync() 또는 추가적인 방법(unique key)으로 데이터 유실/중복 방지.

추가적인 방법으로 유니크 키같은 것으로 유실을 방지할 수 있음 ?

리밸런스 발생 시점

  • consumer.close() 호출시 또는 consumer의 세션이 끊어졌을때

보통 Headbeat * 3 을 세션 시간으로 정한다고 한다.

리밸런스 리스너

리밸런스 발생할 경우 호출되는 리스너. 리밸런스 발생에 따른 offset commit, 리밸런스 시간 측정을 통한 컨슈머 모니터링.

파티션이 끊어지거나 새로 할당 되었을때의 이벤트를 알 수 있음.

offset 커밋이나 파티션이나 커밋이 많을때 할당되는 시간이 오래 걸릴 수 있음. 시간 측정을 위해 로그를 남기는 경우 있음.

Wakeup

컨슈머를 정상 종료해야 할 때 사용.

Wakeup 사용하지 않을 경우.

  1. poll 호출 : records 100개 반환, offset 101 ~ 200
  2. records loop
  3. print
  4. offset 200 커밋
  5. poll 호출
  6. 반복

그러나 갑자기 강제 종료될 경우 문제가 문제가 발생할 수 있다.

이 상태에서 컨슈머를 다시 켜면 커밋 안된 101 ~ 200을 다시 처리(중복)하게 된다

Wakeup을 사용할 경우

자바의 addShutodownHook(익셉션 핸들러)를 설정하여 wakeup을 호추하면 WakeupException 예외 처리가 발생하여 커밋을 완료하고 종료된다.

단 SIGKILL(9)는 프로세스 강제 종료로 커밋 불가(중복/유실 발생)

profile
mohadang

0개의 댓글