Kafka 운영시에는 AWS EC2에 설치하거나 온프로미스 서버에 환경셋팅 한다.
최근에는 쿠버네티스를 통해 운영하기도하는데,
로컬에서 테스트 및 이것저것 Toy Project하기에는 도커로 설치하는게 가장 심플하다.
도커 이미지는 bitnami image를 사용한다. confluentinc image도 있지만 bitnami가 pull 횟수가 가장 많다.
kafka는 zookeeper 이미지도 설치해야한다. KRaft라고 zookeeper없이 설치하는 방법도 있지만
대부분의 문서가 kafka-zookeeper 한 set으로 설명하고 있고
HBase와 같이 zookeeper와 함께 사용하고 있는 프로그램들이 있기에 익숙해지는 것이 좋다.

[ 프로젝트 설정 ]
일단 프로젝트를 만든다. 이 글에선 Pycharm을 사용했다.
kafka와 zookeeper라는 디렉토리를 만들고,
.env파일을 생성한다.
아래와 같은 구조로 설정한다.

[ docker-compose.yaml 작성 ]
아래는 기본적인 서비스를 추가한 내용이다.
이미지 버전은 사용할 kafka 버전에 맞게 변경 할 수 있다.
Ex) bitnami/kafka:3.4.0 - Apache Kafka 2.8.1 버전과 호환
zookeeper service
version: '2'
services:
zookeeper:
image: 'bitnami/zookeeper:latest'
ports:
- '2181:2181'
kafka service
version: '2'
services:
kafka:
image: 'bitnami/kafka:latest'
environment:
- ALLOW_PLAINTEXT_LISTENER=yes
ports:
- '9092:9092'
depends_on:
- zookeeper
[ volumes 설정 ]
.env파일에 프로젝트 절대경로를 나타내는 값을 지정해준다.
BASE_DIR=/Users/myName/Test/your-kafka-project-name
zookeeper service
/zookeeper/data : 카프카브로커ID와 같은 데이터들
/zookeeper/config/zoo.cfg : 주키퍼 설정파일
volumes:
- ${BASE_DIR}/zookeeper/data:/bitnami
- ${BASE_DIR}/zookeeper/config/zoo.cfg:/opt/bitnami/zookeeper/conf/zoo.cfg
kafka service
/kafka/data : topic, offset과 같은 데이터들
/kafka/config/* : 카프카 설정파일
volumes:
- ${BASE_DIR}/kafka/data:/bitnami
- ${BASE_DIR}/kafka/config/server.properties:/opt/bitnami/kafka/config/server.properties
- ${BASE_DIR}/kafka/config/producer.properties:/opt/bitnami/kafka/config/producer.properties
- ${BASE_DIR}/kafka/config/consumer.properties:/opt/bitnami/kafka/config/consumer.properties
[ networks 설정 ]
app-tier라는 네트워크를 정의하여 zookeeper, kafka가 같은 대역에서 통신하도록 한다.
디폴트로 연결되기 때문에 설정하지 않아도 딱히 문제는 없다.
networks:
app-tier:
driver: bridge
[ enviroment 설정 ]
각 서비스 별로 설정 값을 지정한다.
zookeeper service
설정값은 Configuration파트에 상세설명되어있다.
https://hub.docker.com/r/bitnami/zookeeper
environment:
- ZOO_SERVER_ID=1
- ZOO_PORT_NUMBER=2181
- ZOO_TICK_TIME=2000
- ZOO_INIT_LIMIT=10
- ZOO_SYNC_LIMIT=5
- ALLOW_ANONYMOUS_LOGIN=yes
kafka service
설정값은 Configuration파트에 상세설명되어있다.
https://hub.docker.com/r/bitnami/kafka
environment:
- KAFKA_BROKER_ID=1
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
[ 최종 docker-compose.yaml ]
위의 내용을 종합한 yaml 파일을 아래와 같다.
version: '2'
networks:
app-tier:
driver: bridge
services:
zookeeper:
image: 'bitnami/zookeeper:3.7.1'
environment:
- ZOO_SERVER_ID=1
- ZOO_PORT_NUMBER=2181
- ZOO_TICK_TIME=2000
- ZOO_INIT_LIMIT=10
- ZOO_SYNC_LIMIT=5
- ALLOW_ANONYMOUS_LOGIN=yes
volumes:
- ${BASE_DIR}/zookeeper/data:/bitnami
- ${BASE_DIR}/zookeeper/config/zoo.cfg:/opt/bitnami/zookeeper/conf/zoo.cfg
ports:
- '2181:2181'
networks:
- app-tier
kafka:
image: 'bitnami/kafka:3.4.0'
environment:
- KAFKA_BROKER_ID=1
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
volumes:
- ${BASE_DIR}/kafka/data:/bitnami
- ${BASE_DIR}/kafka/config/server.properties:/opt/bitnami/kafka/config/server.properties
- ${BASE_DIR}/kafka/config/producer.properties:/opt/bitnami/kafka/config/producer.properties
- ${BASE_DIR}/kafka/config/consumer.properties:/opt/bitnami/kafka/config/consumer.properties
ports:
- '9092:9092'
depends_on:
- zookeeper
networks:
- app-tier
[ 빌드 및 접속 ]
도커 build를 통해 컨테이너를 실행하고
콘솔에 들어가 토픽을 생성하고 기본적인 프로듀서-컨슈머 작업을 진행한다.
# Background Execution
docker-compose -f docker-compose.yaml up -d
# Connect process console
docker exec -u root -it kafka-connector-docker-kafka-1 bash
콘솔을 통해 프로듀서-컨슈머 예제 실행은 아래 URL을 참고한다.
https://kafka.apache.org/quickstart
[ 참조 ]
# Zookeeper Reference
https://hub.docker.com/r/bitnami/zookeeper
https://github.com/bitnami/containers/tree/main/bitnami/zookeeper
# Kafka Reference
https://hub.docker.com/r/bitnami/kafka
https://github.com/bitnami/containers/tree/main/bitnami/kafka
'DataPipeline > Kafka' 카테고리의 다른 글
| 실전 카프카 - 3장 기본 개념과 구조 (0) | 2024.12.01 |
|---|---|
| Kafka - CDC Connector Debezium 예제 (0) | 2024.11.29 |
| Apache Kafka - Simple Python Code (0) | 2023.03.22 |
| Apache Kafka - 토픽삭제가 안되는 경우 (0) | 2023.03.22 |
| Apache Kafka - 재시작시 meta.propertie 에러 (0) | 2023.03.21 |