컨슈머는 카프카클러스터 내부의 파티션으로부터 레코드를 가져온다(READ)

이때 컨슈머는 각각 고유의 속도로 커밋로그(파티션)로부터 Poll(read)해오는데 그 순서는 다음과 같다.

Untitled

서로 다른 컨슈머그룹에 속한 컨슈머는 서로 관련이 없으며, 커밋로그에 있는 레코드에 대해서는 동시에 읽을 수 있다. 이때 컨슈머는 Consumer Offset을 기록하는데, 이를 통해 읽은 위치를 다시 읽지않도록 커밋하게 된다.

Untitled

위 그림에서 컨슈머그룹A는 다음 3번의 레코드를 읽게 된다 (__consumer_offsets에 현재 오프셋 저장)

컨슈머그룹B는 다음 대상레코드로 9번을 가리키게된다.

→ 컨슈머 자체가 데이터를 가지는것이 아니라 카프카의 Internal Topic에 해당 메타데이터를 저장한다.

컨슈머 그룹

컨슈머는 동일한 Group.id로 구성되어 하나의 컨슈머그룹을 형성한다.

아래 그림과 같이 4개의 파티션이 있는 토픽을 컨슘하는 4개의 컨슈머가 하나의 컨슈머그룹에 있다고 가정해보자. 이때 각 컨슈머는 하나의 파티션에 대응되어 레코드를 컨슘한다. 따라서 컨슈머그룹의 컨슈머들은 각 파티션을 분배받아 컨슘하게된다. 컨슈머들은 어느정도 균등하게 작업량을 분배받는다.

Untitled

그렇다면 여러개의 컨슈머 그룹이 있다고 가정해보자.

각 컨슈머그룹은 상호 연관관계가 전혀 없으며 동일 레코드에 대해 동시 READ가 가능하므로 비동기적으로 동작한다.

Untitled

순서 보장 (Message Ordering)