본문 바로가기
개발 지식/Kafka

[Kafka] kafka 토픽 생성, 메시지 Producer 및 Consumer - 02 (Mac)

by 에르주 2021. 11. 4.
반응형

2장 첫번째 블로그에서 Docker 컨테이너에 Kafka와 zookeeper에 대한 환경설정을 진행하고 Run까지 진행하였다.

이번 장에서는 카프카 토픽을 주고 받을 수 있는 가장 기본적인 설정을 진행 했으니 TOPIC을 생성하고 메시지를 보내보는 것까지 실습하고자 한다.

 

우선 Docker 컨테이너에 정상적으로 Kafka와 zookeeper가 돌아가고 있는 지 확인해보자.

% docker ps -a

 

docker ps -a

er-kafka와 er-zookeeper라는 이름으로 현재 컨테이너가 실행되는 것을 확인 할 수 있다.

 

 

이제 설치는 완료 되었고 컨테이너가 정상적으로 돌아가는 것 또한 확인했다.

카프카 및 주키퍼 서버를 Start하고 Topic을 생성 그리고 메시지를 주고 받기 위해서 컨테이너로 접속을 해보자.

% docker exec -i -t er-kafka bash  // er-kafka bash 접속
% docker exec -i -t er-zookeeper bash // er-zookeeper bash 접속

1. 주키퍼 서버 실행하기

% docker exec -i -t er-zookeeper bash

bash로 해당 컨테이너에 접속을 했다.

 

1-1) 주키퍼 서버 실행하기

bash bin/zkServer.sh start /opt/zookeeper-3.4.13/conf/zoo.cfg -demon
 # Backgroud 동작을 위해 -daemon 추가

 

bash zkServer.sh start conf/zoo.cfg -demon

 

netstat -l grep 2181

 

됐다! 주키퍼 서버의 2181가 LISTEN으로 되어있다. 즉 서버가 정상적으로 동작하고 있다.

 

2. 카프카 서버 실행하기

% docker exec -i -t er-kafka bash

er-kafka 컨테이너로 접속한다.

 

2-1) 카프카 서버 실행하기

kafka-server-start.sh -daemon

 

 

2-2) 카프카 토픽 확인

% kafka-topics.sh --list --zookeeper zookeeper

 

kafka-topics.sh --list --zookeeper zookeeper

 

 

2-3) 추가 : 토픽 생성 

토픽 생성 명령어는 다음과 같다.

% kafka-topics.sh  --create --zookeeper zookeeper:2181 --topic Erjuer01 --partitions 1 --replication-factor 1

 

create_topics.sh 파일을 살펴보면 

토픽을 생성하는 Command를 볼 수 있다.

 COMMAND="JMX_PORT='' ${KAFKA_HOME}/bin/kafka-topics.sh \\
		--create \\
		--zookeeper ${KAFKA_ZOOKEEPER_CONNECT} \\
		--topic ${topicConfig[0]} \\
		--partitions ${topicConfig[1]} \\
		--replication-factor ${topicConfig[2]} \\
		${config} \\
		${KAFKA_0_10_OPTS} &"
    eval "${COMMAND}"

 

토픽 생성 명령어를 뜯어 보자면

1) --zookeeper zookeeper:2181  -> ${KAKFA_ZOOKEEPER_CONNECT} // 카프카와 주키퍼의 연결 2181 포트

2) --topic Erjuer01 -> ${topicConfig[0]}  // TOPIC 명 : Erjuer01

3) --partitions 1 -> ${topicConfig[1]} // 파티션의 갯수 : 1

4) --replication-factor 1 ->  ${topicConfig[2]} //  복제 요소 1  

 

 

특히 4번 내용은 3장에서 더 자세히 다루기도 하는데

간단히 언급하고 이야기하자면 Kafka 장애를 대비하여 Broker를 복제를 하는데 1개의 Broker에 복제한다는 뜻이다. 즉 복제본이 하나만 있으며 명령어 그대로 replication factor을 1로 설정하면 Broker가 장애날 시에는 바로 Kafka 또한 장애가 발생한다.

 

카프카 토픽 생성

해당 명령어를 입력하면 "Erjuer01" 이라는 토픽명이 생성된다.

생성이 잘 되어 있는지 카프카 토픽 리스트를 확인해보자.

"Erjuer01" 토픽이 생성된 것을 확인 할 수 있다. 

 

 

 

3. 카프카 서버에서 메시지 발행하기

% kafka-console-producer.sh --topic Erjuer${topic명} --broker-list localhost:9092

 

토픽명 Erjuer로 메시지 발행

 

4. 카프카 서버 메시지 받기 

% kafka-console-consumer.sh --topic Erjuer${topic명} --bootstrap-server localhost:9092 --from-beginning

 

토픽명 Erjuer로 메시지 받기

--from-beginning : 메시지를 처음부터 다시 받겠다는 명령어이다.

 

kafka-topics.sh --describe --zookeeper er-zookeeper:2181 --topic Erjuer

 

물론 메시지 주고 받기 전에 각각 producer와 consumer를 실행해야 메시지를 정상적으로 받아 올 수 있다.

이번 장까지 간단하게 주키퍼와 카프카를 설치 및 실습을 진행했고 더 심화된 3장의 내용을 진행할 예정이다.

 

끝.

반응형

댓글