이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
컨슈머가 poll()을 호출할 때마다
컨슈머 그룹은
카프카에 저장되어 있는
아직 읽지 않은 메시지를 가져온다.
이렇게 동작할 수 있는 것은
컨슈머 그룹이
메시지를 어디까지 가져갔는지 알고 있기 때문이다.
이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
컨슈머 그룹마다
각자의 오프셋을 별도로 관리하기 때문에
하나의 토픽에
복수의 컨슈머 그룹이 연결되어도
다른 컨슈머 그룹에게 영향 없이
메시지를 가져갈 수 있다.
보다 자세한 개념은
Kafka Commit & Offset글을 참고하자.
이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
하나의 토픽에
여러 컨슈머 그룹이 동시에 접속해
메시지를 가져올 수 있다.
기존의 다른 MQ(Message Queue) 솔루션에서는
컨슈머가 메시지를 가져가면
큐에서 삭제되어 다른 컨슈머가 가져갈 수 없게 되는데
카프카에서는 가능해졌다.
이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
하나의 컨슈머 그룹 내에서
토픽에 대한 소유권을
재조정하는 과정을
리밸런스라고 한다.
컨슈머 그룹 내에서
리밸런스가 일어나면
토픽의 각 파티션마다
하나의 컨슈머가 연결된다.
이러한 리밸런스를 통해
컨슈머 그룹에 컨슈머를 쉽고 안전하게 추가할 수 있고
제거할 수도 있어
높은 가용셩과 확장성을 확보할 수 있다.
이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
특정 파티션을 관리하고 있는
파티션 리더에게
메시지 가져오기 요청을 하는 것이다.
각 요청은 로그의 오프셋을 명시하고
그 위치로부터 로그 메시지를 수신한다.
그래서 컨슈머는 가져올 메시지의 위치를 조정할 수 있고
필요하다면 이미 가져온 데이터도 다시 가져올 수 있다.
이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
acks = 1 옵션으로
프로듀서가 카프카 토픽의 리더에게 메시지를 전송했는데
메시지가 손실되는
아주 예외적인 상황에 대해 알아보자.
1. 프로듀서가 acks = 1으로 토픽의 리더에게 메시지를 보낸다.
2. 리더는 메시지를 받은 후 저장한다.
3. 리더는 프로듀서에게 메시지를 받았다고 acks를 보낸다.
4. 팔로워들은 리더를 주기적으로 체크한다.
5. 리더에 새로운 메시지가 있는 것을 확인하고
팔로워들도 저장한다.