먼저 docker-compose.yml 파일을 작성한다.
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
잘 실행된 것 같다
docker-compose.yml 파일에 보면 각 컨테이너마다 토픽을 만들었는데 한번
카프카마다 들어가서 토픽이 잘 생성됐는지 확인해보자
docker exec -it kafka1 /bin/bash
다음 명령어 입력으로 현재 컨테이너의 토픽을 확인해보자
kafka-topics.sh --list --bootstrap-server localhost:9092
kafka1 컨테이너에 각각 컨테이너에서 만든 test1, test2, test3 토픽이 다 들어있다.
kafka2, kafka3 컨테이너에도 접속해서 각 컨테이너에 있는 토픽을 한번 확인해보자.
먼저 현재 kafka1에 접속돼 있는 상태이므로 exit으로 빠져나오자
exit
kafka2 접속
docker exec -it kafka2 /bin/bash
현재 컨테이너에 있는 토픽 호출
kafka-topics.sh --list --bootstrap-server localhost:9092
여기에도 토픽이 3개가 다 있다.
빠져나오자.
exit
kafka3 접속
docker exec -it kafka3 /bin/bash
현재 컨테이너에 있는 토픽 호출
kafka-topics.sh --list --bootstrap-server localhost:9092
여기에도 토픽이 3개가 다 있다.
빠져나오자.
exit
우리는 각 컨테이너에서 토픽을 만들 때 다음과 같이 만들었다.
KAFKA_CREATE_TOPICS: "test1:1:1"
KAFKA_CREATE_TOPICS: "test2:1:1"
KAFKA_CREATE_TOPICS: "test3:1:1"
토픽명 / 파티션갯수 / 레플리카갯수 이므로
아무 카프카에나 들어가서 토픽의 상세설명을 한번 살펴보자
kafka1에 접속
docker exec -it kafka1 /bin/bash
현재 컨테이너에 있는 토픽 상세설명 호출
kafka-topics.sh --describe --bootstrap-server kafka1:9092
test1 토픽을 kafka1에 만들었는데 리더가 kafka2로 선출된걸 알 수 있다.
빠져나오자.
exit
kafka2에 접속
docker exec -it kafka2 /bin/bash
현재 컨테이너에 있는 토픽 상세설명 호출
kafka-topics.sh --describe --bootstrap-server kafka2:9092
test2 토픽을 kafka2에 만들었는데 리더가 kafka1로 선출된걸 알 수 있다.
빠져나오자.
exit
kafka3에 접속
docker exec -it kafka3 /bin/bash
현재 컨테이너에 있는 토픽 상세설명 호출
kafka-topics.sh --describe --bootstrap-server kafka3:9092
test3 토픽을 kafka3에 만들었는데 리더가 kafka3으로 선출된걸 알 수 있다.
빠져나오자.
exit
자세한건 다음에 알아보자~
'Data Engineering > Kafka' 카테고리의 다른 글
[kafka] 도커의 각 컨테이너의 접속할 때 현재의 사용자계정을 확인하는 방법 whoami (0) | 2021.12.23 |
---|---|
[kafka] 카프카 클러스터끼리 네트워크 연결 통신상태 확인하는 방법 (0) | 2021.12.23 |
[kafka] 도커컴포즈로 싱글노드 카프카 만드는 방법 (docker compose, single, kafka, zookeeper) (0) | 2021.12.23 |
[kafka] 카프카의 구성요소 (0) | 2021.12.19 |
[kafka] 카프카 예제 및 명령어 공부 3 (0) | 2021.06.14 |