[Kafka CLI] 4. Kafka Consumer Group Read

Cunsumer Group 이란?

Consumer Instance를 대표하는 그룹

  • 파티션 5개가 주어지고 각자 자동으로 분배된 컨슈머에 소비되고 있다.
클러스터 위치토픽명보안설정파일
자신의 카프카 서버 IP사용하고자 하는 데이터와 연관된 이름보안이 필요한 설정 파일명 또는 위치
  • 외부나 보안 설정을 해서 접속하려면 보안설정파일을 설정해서 해야한다.

동일한 그룹 내에서 여러 컨슈머를 생성하는 방법

이름값 (원하는 그룹ID 지정)설명
–groupmy-first-application컨슈머 그룹 지정 :
콘솔 컨슈머에게 컨슈머 그룹을 사용할거라고 알려주는 옵션
# 토픽 생성
kafka-topics.sh --bootstrap-server [클러스터위치] --topic [토픽명] --create --partitions 3

# 그룹 지정해서 컨슈머에 대한 소비하기
# 토픽으로 프로듀싱을 시작하지 않았기 때문에 아무일도 일어나지 않음.
kafka-console-consumer.sh --bootstrap-server [클러스터위치] --topic [토픽명] --group my-first-application

# 프로듀싱 시작
kafka-console-producer.sh --bootstrap-server [클러스터위치] --producer-property partitioner.class=org.apache.kafka.clients.producer.RoundRobinPartitioner --topic [토픽명]

또 다른 컨슈머를 실행하기

# 그룹 지정해서 컨슈머에 대한 소비하기
# 토픽으로 프로듀싱을 시작하지 않았기 때문에 아무일도 일어나지 않음.
kafka-console-consumer.sh --bootstrap-server [클러스터위치] --topic [토픽명] --group my-first-application

실행 결과 터미널을 통해 컨슈머 그룹을 지정하고 각각의 터미널에 실행하면 1개의 파티션이 2개의 컨슈머로 이루어진 그룹으로 되어서 프로듀서를 통해 메세지를 전달해보면 각각 나눠서 들어가는것을 볼 수 있다. 정리 해보면 다음과 같다.

  • 컨슈머 그룹을 지정해서 컨슈머를 여러개 생성하여 프로듀서를 통해 메세지를 전송해보면 여러 컨슈머를 걸쳐 배포되는것을 볼 수 있다.
  • 로드밸런싱 처럼 자동으로 분배된다.
  • 파티션개수를 초과하는 컨슈머는 할당되지 않는다.
  • 컨슈머를 줄이면 파티션에 할당되는 컨슈머에 대해 자동으로 균형을 맞춰준다.

컨슈머 종료하고 프로듀싱만 해보기 – 이전에 발생한 메세지

  • 모든 컨슈머를 종료하고 프로듀싱으로 메세지만 전달하고 다시 컨슈머를 실행하면 이전에 전송된 메세지를 여러 파티션에 걸쳐서 소비하고 있기 때문에 따라잡기 위해 표시를 해준다.
    • 이 메세지들은 컨슈머로 전송된다.
    • 이전 작업에서 발생한 랙을 따라잡고 있기 때문이다.
# 그룹 지정해서 컨슈머에 대한 소비하기
# 토픽으로 프로듀싱을 시작하지 않았기 때문에 아무일도 일어나지 않음.
kafka-console-consumer.sh --bootstrap-server [클러스터위치] --topic [토픽명] --group my-first-application

>
프로듀서가 보낸 메세지들...

컨슈머를 처음부터 새로운 그룹을 지정하고 다시 시작한 경우 (–from-beginning)

이름기능설명
–from-beginning그릅의 일부로 커밋된 컨슈머 오픈셋이 없는 경우에만 쓰일 수 있는 기능이다. 한마디로 그룹으로 한번도 지정이 안된 오프셋이여야 한다.“ 이 새 그룹에서는 처음부터 시작해줘 “ 라고 요청한 상태라고 보면된다.
오프셋?오프셋이란, 각 파티션마다 메시지가 저장되는 위치간단하게 설명하면 “consumer에서 메시지를 어디까지 읽었는지 저장하는 값”
# 그룹 새로 지정
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic third_topic --group my-second-application --from-beginning

>
test
world
js

hello
ㅓㄴ
ll
love
ok
last
k
i
  • 이전에 지정한 토픽의 모든 메세지를 출력한다.
  • –from-beginning를 사용하지 않으면 마지막으로 컨슈머 오프셋이 커밋된 곳에서 읽는 상태가 된다.

컨슈머와 컨슈머 그룹은 정말 중요한 내용이다. ! 꼭 숙지 잘하자!

LIST