Server/MQ

Windows 환경에 kafka 설치하고 간단히 테스트하기

호형 2021. 2. 23. 23:34

MSA 프로젝트를 진행중인데 API 서버간의 트랜잭션 처리(보상 트랜잭션 이라고도 한다.)를 kafka를 이용해서 하기로 하였다. kafka는 RabbitMQ 처럼 Message Queue를 사용하여 비동기 처리를 가능하게 하는 역할을 담당하고 있고 결합도가 낮고 속도가 빠르다는 장점을 가지고 있어서 최근 MSA를 하는데 있어서 많이 사용된다. 일단은 머리가 좋지 않기에 이론을 공부하기 앞서 kafka를 설치를 해보고 프로토타이핑을 해봄으로써 감을 잡아 나가려고 한다. 


갑자기 Docker가 말썽이라 로컬 Windows에 설치를 진행을 하게 되었다. 나중에 Linux 환경에도 다시 설치를 할 계획이다. 환경은 Windows 10 을 사용하고 JDK는 OpenJDK 11을 사용하고 있다. 

 

다운로드 (kafka.apache.org/downloads) 및 설치

 

kafka 다운로드

 

kafka 공식 홈페이지에서 다운로드를 받는다. (현재 2.7.0 까지 나왔다) 그리고 다운받은 파일을 적당한 곳에서 압축을 풀어준다. 

 

 

kafka 설치경로

 

압축을 풀고 bin\windows 폴더로 진입을 한다. 배치파일이 많이 보일것이다. 그리고 여기에서 cmd (or powershell) 창을 열어준다. 

 

 

kafka 실행

실행을 하기 앞서 이해를 돕기 위한 간단한 개념을 알아야 한다. kafka에서 사용되는 용어들인데 Broker는 kafka의 서버를 뜻하며 동일 노드 내에서 여러개의 Broker를 띄울 수 있다. 그리고 이렇게 분산되어서 여러개의 Broker가 띄워져 있으면 이 분산 Message Queue를 관리해주는 역할을 하는것이 Zookeeper이다. kafka 서버를 띄우기 앞서 Zookeeper를 반드시 띄워야 한다. 

 

Zookeeper 실행

zookeeper 실행

> .\zookeeper-server-start.bat ..\..\config\zookeeper.properties

위의 명령어를 치면 실행로그가 쭈욱 나오고 이것은 이상태로 놔두고 새로운 cmd(or powershell)을 열어서 이제 kafka 서버를 실행해보자. 

 

kafka 서버 실행

kafka 서버 실행

> .\kafka-server-start.bat ..\..\config\server.properties

위의 zookeeper를 실행시킨것과 마찬가지로 kafka 서버를 실행시킨다. zookeeper를 실행시켰을때보다 kafka Config를 읽어들이는것을 비롯해 더 많은 양의 로그가 출력이 되는것을 확인할 수 있다. 이것도 닫지 않고 열어놓으면 kafka를 사용할 준비는 모두 끝이 났다. 

 

실행 확인 

 

kafka port

 

kafka 서버의 기본 포트는 9092 이고 zookeeper의 기본 포트는 2181이다. netstat을 통해서 제대로 port가 LISTENING 상태인것을 확인해준다. 위와 같이 떠있으면 정상적으로 동작을 하는 것이고 이제 사용을 하면 된다. 

 


kafka 테스트

kafka에서 설치파일에 간단히 테스트를 해볼 수 있도록 파일들을 제공한다. pub-sub 컨셉의 취지에 맞게 topic을 생성하고 topic에 메세지를 보내고 topic에 있는 메세지를 가지고 오고 하는 것을 수행해 보도록 하겠다. 

 

1. topic 생성 (broker)

새로운 cmd (or powershell)을 열고 아래와 같이 topic을 생성한다. 

 

create topic

> .\kafka-topics.bat --create --bootstrap-server localhost:9092 --topic oingdaddy

그러면 아까 열어놓았던 kafka 서버 cmd에서 다음과 같이 로그가 올라오면서 topic이 제대로 생성되었음을 알 수 있다. 

 

kafka server log

 

 

2. 생성한 topic에 message 보내기 (producer)

kafka producer 

> .\kafka-console-producer.bat  --broker-list  localhost:9092 --topic oingdaddy

생성한 topic에 producer가 message를 쓴다. consumer가 봐주기를 바라고 message를 쓰는 것이다. 계속계속 쓸 수 있다. 적당히 쓰고 새로운 cmd를 하나 더 열어본다. 

 

3. topic에 있는 message 가져오기 (consumer)

kafka consumer

> .\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic oingdaddy --from-beginning


마지막으로 생성한 topic에 producer가 발행한 message를 consumer가 가지고 오는 부분이다. --from-beginnig 옵션은 기존의 발행한 메세지도 모두 보이게 되는 것이라 위와 같은 결과가 나오는 것이다. 

 

 

좌 producer, 우 consumer

 

producer와 consumer를 동시여 열고 producer에서 막 message를 보내보자. 그럼 consumer에서 바로바로 받아지는것을 확인할 수 있다. 

 

이상 kafka를 windows에서 설치하는 방법과 간단하게 테스트를 해보았다. 

 

끝!