이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
컨슈머 어플리케이션들의 기본값으로
많이 사용하고 있는
자동 커밋 방식에 대해 알아보자.
자동 커밋을 사용하고 싶을 때는
컨슈머 옵션 중
enable.auto.commit = true로 설정하면
5초마다 컨슈머는 poll()를 호출할 때
가장 마지막 오프셋을 커밋한다.
5초 주기는 기본값이며
auto.commit.interval.ms 옵션을 통해 조정이 가능하다.
이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
컨슈머가 poll()을 호출할 때마다
컨슈머 그룹은
카프카에 저장되어 있는
아직 읽지 않은 메시지를 가져온다.
이렇게 동작할 수 있는 것은
컨슈머 그룹이
메시지를 어디까지 가져갔는지 알고 있기 때문이다.
이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
컨슈머 그룹마다
각자의 오프셋을 별도로 관리하기 때문에
하나의 토픽에
복수의 컨슈머 그룹이 연결되어도
다른 컨슈머 그룹에게 영향 없이
메시지를 가져갈 수 있다.
보다 자세한 개념은
Kafka Commit & Offset글을 참고하자.
이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
하나의 토픽에
여러 컨슈머 그룹이 동시에 접속해
메시지를 가져올 수 있다.
기존의 다른 MQ(Message Queue) 솔루션에서는
컨슈머가 메시지를 가져가면
큐에서 삭제되어 다른 컨슈머가 가져갈 수 없게 되는데
카프카에서는 가능해졌다.
이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
하나의 컨슈머 그룹 내에서
토픽에 대한 소유권을
재조정하는 과정을
리밸런스라고 한다.
컨슈머 그룹 내에서
리밸런스가 일어나면
토픽의 각 파티션마다
하나의 컨슈머가 연결된다.
이러한 리밸런스를 통해
컨슈머 그룹에 컨슈머를 쉽고 안전하게 추가할 수 있고
제거할 수도 있어
높은 가용셩과 확장성을 확보할 수 있다.
이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
특정 파티션을 관리하고 있는
파티션 리더에게
메시지 가져오기 요청을 하는 것이다.
각 요청은 로그의 오프셋을 명시하고
그 위치로부터 로그 메시지를 수신한다.
그래서 컨슈머는 가져올 메시지의 위치를 조정할 수 있고
필요하다면 이미 가져온 데이터도 다시 가져올 수 있다.