docker에서 카프카를 생성하는 법.
먼저 docker compose를 사용하기 위해 kafka를 다운받을 폴더를 생성한다.
그 후 docker-compose.yml 파일을 생성한다.
version: "3.9"
services:
kafka:
image: apache/kafka:latest
container_name: kafka
ports:
- "9092:9092"
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:29093
# listeners에 CONTROLLER가 반드시 포함되어야 함
KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:29093
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
# controller.listener.names는 위 listeners에 있는 이름과 정확히 일치해야 함
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
volumes:
- kafka_data:/var/lib/kafka
volumes:
kafka_data:
그 후 docker compose up -d 를 사용하여 도커에 카프카를 생성한다.
# 1.exec로 바로 실행
docker exec -it kafka /opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
# 2.컨테이너 쉘에 한번 들어가서 여러 명령 실행
docker exec -it kafka /bin/sh
# 진입 후
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
/opt/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
# 3.docker compose exec 사용
docker compose exec kafka /opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
1번 방법으로 카프카가 정상적으로 동작 되는지 확인 해보자.
/** 토픽 생성 **/
docker exec -it kafka /opt/kafka/bin/kafka-topics.sh `
--bootstrap-server localhost:9092 `
--create --topic test --partitions 1 --replication-factor 1
/** 메시지 생성 **/
docker exec -it kafka /opt/kafka/bin/kafka-console-producer.sh `
--bootstrap-server localhost:9092 `
--topic test
>h1
>h2
//메시지를 다 썻다면 ctrl+c로 빠져 나오자
/**메시지 확인 **/
docker exec -it kafka /opt/kafka/bin/kafka-console-consumer.sh `
--bootstrap-server localhost:9092
--topic test `
--partition 0`
--offset 0`
--max-messages 10

정상적으로 토픽 생성 / 메시지 생성 / 메시지 조회 가 되는것을 확인 할수 있다.
ps. 아직 카프카가 어렵다...
또한 카프카가 버전이 올라가면서 zookeeper가 제거 되면 kafka만 받으면 kraft 모드로 동작을 한다.
그래서 이제는 kafka 도커 이미지 하나로 다 된다고 한다.