docker-compose.yml
version: '2'
services:
# wurstmeister/zookeeper:3.4.6
zookeeper:
hostname: zookeeper
container_name: zookeeper
image: wurstmeister/zookeeper:3.4.6
ports:
- "2181:2181"
# wurstmeister/kafka:2.13-2.8.1 - broker 1
kafka1:
hostname: kafka1
container_name: kafka1
image: wurstmeister/kafka:2.13-2.8.1
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_HOST_NAME: kafka1
BOOTSTRAP_SERVERS: kafka1:9092, kafka2:9093, kafka3:9094
KAFKA_CREATE_TOPICS: "test1:1:1"
ports:
- "9092:9092"
depends_on:
- zookeeper
# wurstmeister/kafka:2.13-2.8.1 - broker 2
kafka2:
hostname: kafka2
container_name: kafka2
image: wurstmeister/kafka:2.13-2.8.1
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_HOST_NAME: kafka2
BOOTSTRAP_SERVERS: kafka1:9092, kafka2:9093, kafka3:9094
KAFKA_CREATE_TOPICS: "test2:1:1"
ports:
- "9093:9092"
depends_on:
- zookeeper
# wurstmeister/kafka:2.13-2.8.1 - broker 3
kafka3:
hostname: kafka3
container_name: kafka3
image: wurstmeister/kafka:2.13-2.8.1
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_HOST_NAME: kafka3
BOOTSTRAP_SERVERS: kafka1:9092, kafka2:9093, kafka3:9094
KAFKA_CREATE_TOPICS: "test3:1:1"
ports:
- "9094:9092"
depends_on:
- zookeeper
도커 컴포즈 실행 명령어
docker-compose up -d
도커 컨테이너 실행 확인
docker ps
명령창 3개를 열어보자
각 명령창에 카프카 컨테이너로 접속해보자
docker exec -it kafka1 bash
docker exec -it kafka2 bash
docker exec -it kafka3 bash
모든 명령창에 카프카 리스트를 조회해보자
kafka-topics.sh --list --bootstrap-server kafka1:9092
kafka-topics.sh --list --bootstrap-server kafka2:9092
kafka-topics.sh --list --bootstrap-server kafka3:9092
이번에는 모든 명령창이 네트워크로 잘 연결됐는지 확인하기위해
각 컨테이너에서 모든 카프카 토픽리스트를 조회해보자
kafka-topics.sh --list --bootstrap-server kafka1:9092
kafka-topics.sh --list --bootstrap-server kafka2:9092
kafka-topics.sh --list --bootstrap-server kafka3:9092
kafka-topics.sh --list --bootstrap-server kafka1:9092
kafka-topics.sh --list --bootstrap-server kafka2:9092
kafka-topics.sh --list --bootstrap-server kafka3:9092
kafka-topics.sh --list --bootstrap-server kafka1:9092
kafka-topics.sh --list --bootstrap-server kafka2:9092
kafka-topics.sh --list --bootstrap-server kafka3:9092
이번에는 다음과같이 조회해보자
kafka-topics.sh --list --bootstrap-server kafka1:9092,kafka2:9092,kafka3:9092
맨 왼쪽에서 test3 토픽을 제거해보자
kafka-topics.sh --delete --bootstrap-server kafka1:9092 --topic test3
이제 모든 컨테이너에서 카프카 토픽을 조회해보자
kafka-topics.sh --list --bootstrap-server kafka1:9092
kafka-topics.sh --list --bootstrap-server kafka2:9092
kafka-topics.sh --list --bootstrap-server kafka3:9092
잘 지워진 것을 확인할 수 있다.
나머지 test1, test2 토픽도 지워보자
kafka-topics.sh --delete --bootstrap-server kafka1:9092 --topic test1,test2
모든 토픽 리스트를 조회해보자
kafka-topics.sh --list --bootstrap-server kafka1:9092
kafka-topics.sh --list --bootstrap-server kafka2:9092
kafka-topics.sh --list --bootstrap-server kafka3:9092
이번에는 두개의 토픽을 생성해보자
kafka-topics.sh --create --bootstrap-server kafka1:9092 --topic test1 --partitions 1 --replication-factor 1
kafka-topics.sh --create --bootstrap-server kafka1:9092 --topic test2 --partitions 1 --replication-factor 3
토픽 리스트를 조회해보자
kafka-topics.sh --list --bootstrap-server kafka1:9092
kafka-topics.sh --list --bootstrap-server kafka2:9092
kafka-topics.sh --list --bootstrap-server kafka3:9092
모든 컨테이너에서 test1 이라는 토픽에 프로듀서를 열어보자
kafka-console-producer.sh --bootstrap-server kafka1:9092 --topic test1
kafka-console-producer.sh --bootstrap-server kafka2:9092 --topic test1
kafka-console-producer.sh --bootstrap-server kafka3:9092 --topic test1
첫번째 컨테이너는 a 1개
두번째 컨테이너는 b 2개
세번째 컨테이너는 c 3개를 입력한다.
프로듀서를 모두 빠져나오자
모든 컨테이너에서 test1 에 대한 컨슈머를 열어보자
kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic test1 --from-beginning
kafka-console-consumer.sh --bootstrap-server kafka2:9092 --topic test1 --from-beginning
kafka-console-consumer.sh --bootstrap-server kafka3:9092 --topic test1 --from-beginning
모든 데이터가 조회된다.
빠져나오자.
test2 토픽에서 동일한 진행을 해보자
먼저 토픽 리스트 조회
kafka-topics.sh --list --bootstrap-server kafka1:9092
kafka-topics.sh --list --bootstrap-server kafka2:9092
kafka-topics.sh --list --bootstrap-server kafka3:9092
모든 컨테이너에서 프로듀서를 실행시킨다
kafka-console-producer.sh --bootstrap-server kafka1:9092 --topic test2
kafka-console-producer.sh --bootstrap-server kafka2:9092 --topic test2
kafka-console-producer.sh --bootstrap-server kafka3:9092 --topic test2
이번에는 첫번째 컨테이너에서 a 3개
두번째 컨테이너에서 b 2개
세번째 컨테이너에서 c 1개를 입력해보자
빠져나온다
모든 컨테이너에서 컨슈머를 입력해보자
kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic test2 --from-beginning
kafka-console-consumer.sh --bootstrap-server kafka2:9092 --topic test2 --from-beginning
kafka-console-consumer.sh --bootstrap-server kafka3:9092 --topic test2 --from-beginning
빠져나오자
새로운 토픽 생성
kafka-topics.sh --create --bootstrap-server kafka1:9092 --topic test3 --partitions 3 --replication-factor 3
토픽 리스트 확인
kafka-topics.sh --list --bootstrap-server kafka1:9092
kafka-topics.sh --list --bootstrap-server kafka2:9092
kafka-topics.sh --list --bootstrap-server kafka3:9092
프로듀서를 열자
kafka-console-producer.sh --bootstrap-server kafka1:9092 --topic test3
kafka-console-producer.sh --bootstrap-server kafka2:9092 --topic test3
kafka-console-producer.sh --bootstrap-server kafka3:9092 --topic test3
첫번째 컨테이너에 aa 2개
두번째 컨테이너에 bb 2개
세번째 컨테이너에 cc 2개를 입력한다
빠져나오자
컨슈머 실행
kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic test3 --from-beginning
kafka-console-consumer.sh --bootstrap-server kafka2:9092 --topic test3 --from-beginning
kafka-console-consumer.sh --bootstrap-server kafka3:9092 --topic test3 --from-beginning
빠져나오자
순서가 지켜지지 않는 것은 다음에 확인해보자
'Data Engineering > Kafka' 카테고리의 다른 글
[Zookeeper] Zookeeper cluster + Zookeeper UI (0) | 2022.06.08 |
---|---|
[Zookeeper] Zookeeper Cluster (docker-compose) (0) | 2022.06.08 |
[kafka] 카프카 토픽 생성하는 방법 (0) | 2022.01.31 |
[kafka] 카프카 클러스터를 GUI(kafdrop)으로 구축하기 (0) | 2022.01.30 |
[kafka] 주키퍼 카프카를 도커컴포즈로 구축하는 방법 (0) | 2022.01.30 |