# 토픽 생성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-serverlocalhost:9092--topicthird_topic--groupmy-second-application--from-beginning>testworldjshelloㅓㄴllloveoklastki
이전에 지정한 토픽의 모든 메세지를 출력한다.
–from-beginning를 사용하지 않으면 마지막으로 컨슈머 오프셋이 커밋된 곳에서 읽는 상태가 된다.