개요
이번 글에서는 Kafka를 Windows 환경에서 설치하고 간단한 테스트를 통해 잘 실행되는지 확인해 보겠습니다.
Kafka 설치
Kafka 홈페이지
Kafka를 다운받기 위해 홈페이지로 이동합니다.
Apache Kafka
Apache Kafka: A Distributed Streaming Platform.
kafka.apache.org
Kafka 다운로드
우측 상단 위에 DOWNLOAD KAFKA 를 클릭해 다운로드 페이지로 이동합니다.
2.X.X 버전의 Scala 2.13을 다운 받습니다. (3 버전 때에는 버그가 있어서 동작이 잘 안될 수도 있다고 합니다.)
tgz 압축 파일 해제
tgz 파일을 C 드라이브에서 압축 해제 합니다.
(바탕화면에 풀었다가는 CMD창에서 명령어를 입력할 때 the input line is too long 에러를 만날 수 있습니다. 그래서 경로가 짧은 C 드라이브에 파일에 두는 것을 추천합니다.)
Kafka의 압축 파일에는 MacOS와 Windows 2가지 용도가 모두 들어있습니다.
MacOS는 bin 폴더 안에 .sh 파일들로 구성되어 있습니다.
Windows는 bin 폴더 안에 windows 폴더 안에 .bat 파일들로 구성되어 있습니다.
이 글은 Windows 용이므로 .bat 파일을 사용합니다.
Kafka 실행할 때 마주칠 수 있는 에러 ( The system cannot find the path specified )
Kafka의 명령어를 실행할 때 위의 명령어를 마주쳐 해결 방안을 기록하려 합니다.
결론적으로 이 문제는 JAVA_HOME의 환경 변수 경로를 변경하여 해결했습니다.
기존에 JAVA_HOME의 경로는 다음과 같았습니다.
문제가 된 기존 경로
C:\Program Files\Java\jdk-11\bin
여기서 Program Files 부분에 띄어쓰기가 있는 부분이 에러를 일으킨 거 였습니다. (Program (여기) Files)
Java 폴더를 C드라이브로 복사한 다음에 경로를 수정했습니다.
수정 된 경로
C:\Java\jdk-11
그 다음 CMD 창을 열어 다음 명령어를 입력했습니다.
setx -m JAVA_HOME " C:\Java\jdk-11"
명령어를 입력한 후 컴퓨터를 재부팅하니 문제를 해결할 수 있었습니다.
만약 같은 문제를 겪고 있으시다면 한 번 해보시는 것을 추천드리겠습니다.
이 문제는 stack overflow를 참고하여 해결했습니다.
Running Kafka on Windows 10 fails: The system cannot find the path specified
I'm trying to run Kafka locally. I've got Zookeeper installed and running. I've downloaded the binaries for Kafka 2.11-1.1.0. I've adjusted the location of the logs in server.config, to a valid path.
stackoverflow.com
Kafka 실행(테스트)
실행하기 앞서 Kafka 명령어를 입력할 때 The system cannot find the path specified를 만나면 위의 글을 참조하셔도 좋을거 같습니다.
실행 흐름
1. ZooKeeper 실행 & Kafka 실행
Kafka를 실행하기 전에 ZooKeeper를 먼저 실행해야 합니다.
ZooKeeper는 카프카를 관리하는 코디네이터로 ZooKeeper가 먼저 실행되어야 Kafka를 실행시킬 수 있습니다.
2. Topic 생성
토픽은 프로듀서와 컨슈머의 매개체 입니다.
프로듀서가 토픽에 메시지를 보내면 해당 토픽을 구독한 컨슈머들에게 메시지가 전달되게 됩니다.
이 때, 토픽에는 메시지가 저장되어 컨슈머가 처음부터 메시지를 받을 수도 있습니다.
3. Producer 메시지 생성 & Consumer 매시지 수신
프로듀서를 실행시켜 토픽에 메시지를 보냅니다.
컨슈머를 실행시켜 토픽에 있는 메시지를 받습니다.
이제 명령어들을 실행시켜 확인해 보겠습니다.
실행(테스트)
테스트를 위해서 총 4개의 Windows Powershell CMD 창이 필요합니다.
ZooKeeper, Kafka, Producer, Consumer 이렇게 4개가 필요합니다.
저는 하나의 CMD를 분할하여 테스트를 진행했습니다.
CMD 창 분할 단축키
창 세로 분할 : Alt + Shift + ‘+’
창 가로 분할 : Alt + Shift + ‘-’
패널 포커스 옮겨다니기
Alt + 방향키
패널, 탭, 창 닫기
Alt + Shift + W
CMD 창은 모두 C:\kafka_2.13-2.8.0 이 경로에서 시작합니다.
1. ZooKeeper 실행
ZooKeeper의 기본 포트 번호는 2181 입니다.
bin\windows\zookeeper-server-start.bat config\zookeeper.properties
bin\windows\zookeeper-server-start.bat : ZooKeeper를 실행하는 실행 파일 입니다.
config\zookeeper.properties : 이 설정 정보를 사용한다는 뜻 입니다. (이 부분을 수정해 원하는대로 설정할 수 있습니다.)
ZooKeeper 실행 확인
netstat -na | findstr "2181"
이렇게 4개의 결과가 나오면 정상 실행된 겁니다.
확인할 때 경로는 어느 곳이든 상관 없습니다.
2. Kafka 실행
Kafka의 기본 포트 번호는 9092 입니다.
bin\windows\kafka-server-start.bat config\server.properties
Kafka 실행 확인
netstat -na | findstr "9092"
마찬가지로 4개의 결과가 나오면 정상 실행된 겁니다.
3. Kafka Topic 생성하기
Kafka Topic 생성은 양식이 있습니다. 이 양식을 원하는데로 바꿔서 사용합니다.
# kafka topic 생성하기
# bin\windows\kafka-topics.bat --create --bootstrap-server 카프카 접속주소:카프카 포트 --topic 카프카 토픽이름
ex)
bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --topic test-topic
# kafka topic 생성확인
# bin\windows\kafka-topics.bat --list --bootstrap-server 카프카 접속주소:카프카 포트
ex)
bin\windows\kafka-topics.bat --list --bootstrap-server localhost:9092
kafka topic이 생성되면 C:\tmp\kafka-logs 위치에도 topic의 폴더가 생성됩니다.
4. 생성된 Topic에 Message 보내기 (Producer)
Topic 을 만든 Powershell에서 진행해도 무방합니다.
# Producer 생성 예시
# bin\windows\kafka-console-producer.bat --broker-list 카프카 접속주소:카프카 포트 --topic 카프카 토픽이름
ex)
bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test-topic
Producer가 되면 > 가 생깁니다. 메시지를 입력하면 토픽으로 전송됩니다.
5. Topic에서 Message 가져오기 (Consumer)
# Consumer 생성 예시
# bin\windows\kafka-console-consumer.bat --bootstrap-server 카프카 접속주소:카프카 포트 --topic 카프카 토픽이름
ex)
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test-topic
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test-topic --from-beginning
—from-beginning 옵션을 추가하면 기존의 발행한 메세지도 모두 가져옵니다.
이 상태에서 Producer에 메시지를 입력하면 Consumer가 메시지를 받아오는 것을 확인할 수 있을 겁니다.
마무리
이번에는 Windows 환경에서 Kafka를 설치하고 테스트 하는 내용을 정리해 보았습니다.
다음에는 Spring Boot와 연동해보도록 하겠습니다.
감사합니다.