개발은 재밌어야 한다
article thumbnail
반응형

Consumer Offset

해당 Consumer가 읽은 파티션의 위치의 그 다음번째를 저장한다.

위의 예시로 Consumer Group A가 MyTopic 파티션에서 2번째에 있는 위치를 가져가서 사용을 했다면 그 다음 읽어갈 위치인 3번째의 위치를 저장합니다.

카프카의 내부 인터널 토픽에 저장을 한다(Topic __consumer_offsets)

 

 

컨슈머가 하나이고 해당 컨슈머가 모든 파티션의 데이터를 읽어간다하면 해당 컨슈머는 모든 파티션의 모든 레코드를 Consume한다.

동일한 컨슈머 그룹을 가지고 싶다면 group.id가 같기만 하면 된다.

위와 같은 경우 파티션4개, 컨슈머4개 이므로 각자 하나의 컨슈머에서 하나의 파티션을 consume할 수 있다.

 

 

멀티 컨슈머 그룹

다른 Consumer Group의 Consumer 들은 분리되어 독립적으로 작동

 

파티션이 하나로 구성해서 모든 메세지에서 전체 순서 보장을 해야 하는 경우는 얼마나 많을까? → 대부분의 경우, Key로 구분할 수 있는 메세지들의 순서 보장이 필요한 경우가 많다 

(데이터 베이스를 예로 들자면, 데이터베이스에서 순서를 보장하는 경우는 어떤 경우인가?  특정 테이블의 순서를 보장을 할 수도 있다, 하지만 그 특정 테이블의 특정 로우만의 순서를 보장하면 되기만 하면 된다)

 

 

파티션을 번호를 결정하는 해시 알고리즘을 파티션의 개수로 결정하기 때문에 운영중에 파티션 개수가 변경되면 순서보장을 할 수 없다

 

 

키의 유일성

컨슈머 실패시 컨슈머 리벨런싱

3번 Consumer가 장애가 났을경우 Consumer Group 내의 다른 Consumer가 실패한 Consumer를 대신하여 파티션에서 데이터를 가져와서 처리한다.

요약

반응형
profile

개발은 재밌어야 한다

@ghyeong

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!