컨슈머 기본 동작 및 주요 옵션

컨슈머 기본 동작과 주요 옵션에 대해 설명

컨슈머는 카프카의 토픽에 저장되어 있는 메시지를 가져오는 역할을 담당. 단순하게 메시지만 가져오는 기능만 하는 것이 아니라 내부적으로는 컨슈머 그룹, 리밸런싱 등 여러 동작을 수행 함.

기본 동작

프로듀서가 카프카의 토픽으로 메시지를 전송하면 해당 메시지들은 브로커들의 로컬 디스크에 저장되며 컨슈머를 이용해 토픽에 저장된 메시지를 가져올 수 있음.

컨슈머 그룹은 하나 이상의 컨슈머들이 모여 있는 그룹을 의미하고, 컨슈머는 반드시 컨슈머 그룹에 속하게 됨. 그리고 컨슈머 그룹은 각 파티션의 리더에게 카프카 토픽에 저장된 메시지를 가져오기 위한 요청을 보냄.

이때 파티션 수와 컨슈머 수(하나의 컨슈머 그룹 안에 있는 컨슈머 수)는 1:1로 매핑되는 것이 이상적 임.

주의: 파티션 수와 컨슈머 수의 비율을 반드시 1:1로 매핑해야 하는 것은 아니지만, 파티션 수보다 더 많다고 해서 더 빠르게 토픽의 메시지를 가져오거나 처리량이 높아지는 것이 아니라 더 많은 수의 컨슈머들이 대기 상태로 존재하기 때문.

컨슈머 주요 옵션

Consumer Option Description
bootstrap.servers 프로듀서와 동일하게 브로커의 정보를 입력.
fetch.min.bytes 한 번에 가져올 수 있는 최소 데이터 크기. 지정한 크기보다 작은 경우, 요청에 응답하지 않고 데이터가 누적될 때까지 대기.
group.id 컨슈머가 속한 컨슈머 그룹을 식별하는 식별자. 동일한 그룹 내의 컨슈머 정보는 모두 공유 됨.
heartbeat.interval.ms 하트 비트가 있다는 것은 컨슈머의 상태가 active임을 의미. session.timeout.ms와 밀접한 관계가 있으며, session.timeout.ms보다 낮은 값으로 설정해야 함. 일반적으로 session.timeout.ms의 1/3로 설정.
max.partition.fetch.bytes 파티션 당 가져올 수 있는 최대 크기
session.timeout.ms 이 옵션을 이용해, 컨슈머가 종료된 것인지를 판단. 컨슈머는 주기적으로 하트 비트를 보내야 하고, 만약 이 시간 전까지 하트 비트를 보내지 않았다면 해당 컨슈머는 종료된 것으로 간주하고 컨슈머 그룹에서 제외 후, 리밸런싱을 시작 함.
enable.auto.commit 백그라운드로 주기적으로 오프셋을 커밋
auto.offset.reset 카프카에서 초기 오프셋이 없거나 현재 오프셋이 더 이상 존재하지 않는 경우에 다음 옵션으로 reset 함.
  • earliest: 가장 초기의 오프셋값으로 설정
  • latest: 가장 마지막 오프셋값으로 설정
  • none: 이전 오프셋값을 찾지 못하면 에러를 나타냄.
fetch.max.bytes 한 번의 가져오기 요청으로 가져올 수 있는 최대 크기
group.instance.id 컨슈머의 고유 식별자. 만약 설정한다면 static 멤버로 간주되어, 불필요한 리밸런싱을 하지 않음.
isolation.level 트랜잭션 컨슈머에서 사용되는 옵션.
  • read_uncommited(Default) : 모든 메시지를 읽음
  • read_committed : 트랜잭션이 완료된 메시지만 읽음
max.poll.records 한 번의 poll() 요청으로 가져오는 최대 메시지 수.
partition.assignment.strategy 파티션 할당 전략.(Default : range)
fetch.max.wait.ms fetch.min.bytes에 의해 설정된 데이터보다 적은 경우 요청에 대한 응답을 기다리는 최대 시간.