Windows 환경에서 Docker를 설치해보자. (for Kafka)

작업관리자 (Ctrl + Alt + Del) > 성능 탭에서 가상화가 사용중인지 확인제어판 > 관리 도구에 Hyper-V 관리자가 있다면 성공
Ctrl + R > cmd 입력)에서 docker version을 입력
로컬 환경(
no cloud)에서Docker를 이용하여 Kafka 서버를 구축하는 방법에 대해 알아보자!
wurstmeister/kafka를 선택하자.
wurstmeister/kafka 공식 문서로 가기docker-compose를 설치
Zookeeper가 사전에 실행되어야 하기 때문에 compose를 통해 실행하는 것이 좋다.docker-compose는 설치된다.
docker-compose에 KAFKA_ADVERTISED_HOST_NAME를 개발자 본인의 도커 호스트 IP와 맞도록 변경해야 한다.
docker-compose.yml 파일이다.localhost 또는 127.0.0.1과 같은 아이피를 사용하지 말자.또 다른 Kafka 이미지를 커스텀하고 싶다면, docker-compose.yml에 환경 변수로써 추가하자.
message.max.bytes와 같은 변수를 향상시키기 위해 KAFKA_MESSAGE_MAX_BYTES: 2000000와 같이 설정하고, 자동으로 설정되는 Topic을 끄기 위해 KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'를 설정.LOG4J_로 미리 설정된 환경 변수를 추가함으로써 KAFKA의 log4j 사용을 커스터마이징 할 수 있다. 이는 log4j.properties와 매핑될 것이다.
LOG$J_LOGGER_KAFKA_AUTHORIZER_LOGGER=DEBUG, authorizerAppenderdocker-compose.yml을 생성version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
#build: .
image: wurstemister/zookeeper
ports:
- "9092"
environment:
DOCKER_API_VERSION: 1.22
KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sockKAFKA_ADVERTISED_HOST_NAME는 사전 준비 두번째 사항에 따라 본인의 도커 호스트 IP와 동일하게 작성해야 한다. 하지만, 해당 블로그에서는 간단하게 환경을 구축하기 위해서 KAFKA_ADVERTISED_HOST_NAME 부분만 수정하여 싱글 브로커 환경으로 카프카를 생성할 것이다.docker-compose.yml 파일 작성을 마치고 파일이 저장된 위치에서 compose를 실행해보자.
docker-compose up -d 명령어를 통해서 이미지 다운 완료를 가르키는 done이 떴으니 실제로 컨테이너가 실행되는지 확인해보자!
Kafka와 Zookeeper 컨테이너가 실행되고 있다.Kafka를 다운로드하고 실행해보자.

2.13을 받았다. (docker-compose.yml가 있는 파일 경로)Kafka는 스칼라로 개발되었기 때문에 시스템에 JVM(+8)이 설치되어 있어야 한다.필자는 Windows Poswershell를 이용하여 리눅스 환경에서 실행할 것이다.
Zookeeper는 Kafka 클러스터의 데이터들을 관리하기 위해 사용되기 때문에 Kafka 실행 전, Zookeeper를 먼저 실행해야 한다.
kafka_2.13-3.0.0/bin

zookeeper-server-start.sh : Zookeeper 서버를 실행하는 파일kafka-server-start.sh : Kafka 서버 실행 파일kafka_2.13-3.0.0/config

zookeeper.propertiesZookeeper의 서버 설정 파일clientPort=2181server.propertiesKafka의 서버 설정 파일bin/zookeeper-server-start.sh config/zookeeper.properties
#(Another Windows PowerShell)
bin/kafka-server-start.sh config/server.properties
위와 같은 명령어를 통해 Zookeeper와 Kafka를 실행하자.
❓아래와 같은 오류가 뜬다면 WSL 2를 설치 또는 재설정해야한다.
[0.003s][error][logging] Error opening log file '/c/Users/Manol/Downloads/kafka_2.13-2.7.0/kafka_2.13-2.7.0/bin/../logs/kafkaServer-gc.log': No such file or directory
[0.003s][error][logging] Error opening log file '/c/Users/Manol/downloads/kafka_2.13-2.7.0/kafka_2.13-2.7.0/bin/../logs/zookeeper-gc.log': No such file or directory
Kafka 실행 예제도 있다.Ubuntu 20.04 LTS 환경으로 바꿨다.해당 예제는 오류를 만난 필자로 인해
Ubuntu 20.04 LTS환경에서 작업한 내용이다.
Topic 관련 옵션이 궁금할 때 : bin/kafka-topics.sh --help (help 명령어)Topic 생성 (또 다른 창을 열어야 한다.)bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test--create : 새로운 토픽 생성 옵션--bootstrap-server--replication-factorPartition 복제 수server.properties의 default.replication.factor로 설정 가능--partitionsserver.properties의 num.partitions로 설정 가능--topiccreate, alter, describe, delete 옵션에 사용할 토픽 이름\로 escape.bin/kafka-topics.sh --list --bootstrap-server localhost:9092
bin/kafka-topics.sh --describe --topic test --bootstrap-server localhost:9092
bin/kafka-topics.sh --delete --topic test --bootstrap-server localhost:9092server.properties의 delete.topic.enable=true 설정으로 가능 + 서버 재시작Producer 관련 옵션이 궁금할 때 : bin/kafka-console-producer.sh --help (help 명령어)bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
Consumer 관련 옵션이 궁금할 때 : bin/kafka-console-consumer.sh --help (help 명령어)bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
--from-beginningoffset이 없으므로 가장 최신의 메시지 대신 가장 먼저 도착한 메시지부터 읽도록 하는 옵션입니다.