docker
docker 로 kafka 설치
wefree
2021. 12. 22. 23:43
https://github.com/wurstmeister/kafka-docker 를 이용해 kafka 를 설치한다.
https://github.com/windbird123/kafka-docker 에는 아래의 수정이 적용되어 있어 docker-compose.yml 의 volumes 항목만 수정해 바로 docker-compose 로 실행할 수 있다.
kafka-docker clone
git clone https://github.com/wurstmeister/kafka-docker.git
Dockerfile 수정
# 설치할 kafka, scala 버전을 변경해 준다.
# https://github.com/wurstmeister/kafka-docker#tags-and-releases 참고
ARG kafka_version=2.4.1
ARG scala_version=2.12
# docker-compose.yml 에서 /kafka mount 위치를 명시적으로 지정하도록 수정할 예정이므로
# VOLUME 부분을 주석 처리해 준다.
#VOLUME ["/kafka"]
docker-compose.yml 수정
kafka 항목에 environment, volumes 를 아래와 같이 수정한다.
kafka:
build: .
ports:
# 명시적으로 9092->9092 port 를 연결
- "9092:9092"
environment:
DOCKER_API_VERSION: 1.22
# 현재 host 의 hostname(or ip)
KAFKA_ADVERTISED_HOST_NAME: localhost
# LEADER_NOT_AVAILABLE 가 발생할 경우
# 참고: https://17billion.github.io/kafka/2017/09/01/kafka_leader_not_available.html
KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://localhost:9092'
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
# 기타 환경 설정
KAFKA_MESSAGE_MAX_BYTES: 10000000
KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
KAFKA_DELETE_TOPIC_ENABLE: 'true'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# kafka 데이터를 저장할 위치를 명시적으로 마운트 한다.
- /mydir/kafka/data:/kafka
docker-compose 실행
# 최신 버전 docker 가 설치되었다면
docker compose up -d
# 혹은 docker-compose 가 설치되었다면
docker-compose up -d
kafka 동작 테스트
kafka download
Dockerfile 에 정의한 kafka, scala 버전과 일치하는 kafka 를 다운로드 한다.
wget https://archive.apache.org/dist/kafka/2.4.1/kafka_2.12-2.4.1.tgz
tar xvfz kafka_2.12-2.4.1.tgz
topic 생성
test 이름으로 topic 을 생성한다.
cd kafka_2.12-2.4.1/
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 4 --topic test
consumer 실행
test topic 을 consume 하는 consumer 를 실행한다.
bin/kafka-console-consumer.sh --topic test --bootstrap-server localhost:9092 --from-beginning
producer 실행
새로운 터미널을 열어 producer 를 실행한다.
bin/kafka-console-producer.sh --topic test --broker-list localhost:9092
producer 와 consumer 연동 확인
- producer 가 실행된 터미널 abc123 입력후 엔터
- consumer 터미널에서 abc123 을 읽어 출력되는 것 확인
(참고) topic 삭제
bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test