---
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.0.1
container_name: zookeeper
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
broker:
image: confluentinc/cp-kafka:7.0.1
container_name: broker
ports:
# To learn about configuring Kafka for access across networks see
# https://www.confluent.io/blog/kafka-client-cannot-connect-to-broker-on-aws-on-docker-etc/
- "9092:9092"
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://broker:29092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
공식 문서에 나와있는 docker-compose.yml
내용을 그대로 복사해서 붙여넣기 했다. 내용은 kafka와 zookeeper를 실행시키고 zookeeper를 그대로 연결해서 띄우는거다. 실제로 로컬에서 일일히 띄우기 귀찮았는데 docker를 사용하면 파일 하나만 실행시키면 자동으로 되는게 너무 편하다.
docker-compose up -d
로 실행시킨다.
만약 여기서 에러가 발생한다면 사용되는 포트를 한번 확인해보자. 나의 경우 9092가 java로 실행되고 있더라... 아마 kafka를 여기서 실행해봤었나보다...
정상적으로 실행되었음을 확인했다.
docker exec broker kafka-topics --bootstrap-server broker:9092 --create --topic quickstart
kafka 서버인 broker에 topic을 생성하는 명령어를 전달하자.
topic이 생성되었다.
topic에 메세지를 전달해보자
docker exec -it broker kafka-console-producer --bootstrap-server broker:9092 --topic quickstart
명령어를 입력한 뒤
마음대로 텍스트를 작성하면 된다.
나는 다음과 같이 입력했다.
docker exec -it broker kafka-console-consumer --bootstrap-server broker:9092 --topic quickstart --from-beginning
다음 명령어로 consumer를 실행시켜 메세지를 읽어보자
가장 처음 나온 ' 세개는 내가 오타로 입력한 값이고 그 이후 값은 잘 나온것을 확인할 수 있었다.
여기까지 docker를 사용하여 kafak에 대한 간단한 사용방법을 학습했다.