-
[Kafka] - 17. Docker-compose Kafka 개발환경 구축 및 테스트개발/Kafka 2022. 8. 11. 17:34
1. Docker 설치
Docker부터 설치하여 줍니다. ( 설치 방법은 Docker Category에서 확인하시면 됩니다. )
$ docker -v # Docker version 20.10.17, build 100c701 $ docker-compose -v # Docker Compose version v2.6.1
Docker를 기본으로 하기 때문에 중간에 이해가 안되시면 Docker 개념부터 보시는 것을 추천합니다.
2. Zookeeper, Broker Container 설치 및 실행
- 이론에서 배운 바와 같이 Zookeeper가 실행 한 후에 Kafka를 실행시켜주어야 합니다. ( 이에 따라 Broker에는 depends_on parameter 추가 참고 )
- Zookeeper1,2,3은 12181번 / 22181번 / 32181번 포트를 사용합니다.
- Kafka1,2,3(Broker) 19092번 / 29092번 / 39092번 포트를 사용합니다.
- Port번호를 A:B로 표현한 경우, B는 외부 포트번호이며 A는 내부적으로 통신하기 위한 포트번호입니다.
- Zookeeper와 Broker Volume을 Mount할 경로와 Container경로를 매칭하여 줍니다.
version: '3' services: zookeeper-1: hostname: zookeeper1 image: confluentinc/cp-zookeeper:6.2.0 environment: ZOOKEEPER_SERVER_ID: 1 ZOOKEEPER_CLIENT_PORT: 12181 ZOOKEEPER_DATA_DIR: /zookeeper/data ZOOKEEPER_SERVERS: zookeeper1:22888:23888;zookeeper2:32888:33888;zookeeper3:42888:43888 ports: - 12181:12181 - 22888:22888 - 23888:23888 volumes: - ./zookeeper/data/1:/zookeeper/data zookeeper-2: hostname: zookeeper2 image: confluentinc/cp-zookeeper:6.2.0 environment: ZOOKEEPER_SERVER_ID: 2 ZOOKEEPER_CLIENT_PORT: 22181 ZOOKEEPER_DATA_DIR: /zookeeper/data ZOOKEEPER_SERVERS: zookeeper1:22888:23888;zookeeper2:32888:33888;zookeeper3:42888:43888 ports: - 22181:22181 - 32888:32888 - 33888:33888 volumes: - ./zookeeper/data/2:/zookeeper/data zookeeper-3: hostname: zookeeper3 image: confluentinc/cp-zookeeper:6.2.0 environment: ZOOKEEPER_SERVER_ID: 3 ZOOKEEPER_CLIENT_PORT: 32181 ZOOKEEPER_DATA_DIR: /zookeeper/data ZOOKEEPER_SERVERS: zookeeper1:22888:23888;zookeeper2:32888:33888;zookeeper3:42888:43888 ports: - 32181:32181 - 42888:42888 - 43888:43888 volumes: - ./zookeeper/data/3:/zookeeper/data kafka-1: image: confluentinc/cp-kafka:6.2.0 hostname: kafka1 depends_on: - zookeeper-1 - zookeeper-2 - zookeeper-3 environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper1:12181,zookeeper2:22181,zookeeper3:32181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:19092 KAFKA_LOG_DIRS: /kafka ports: - 19092:19092 volumes: - ./kafka/logs/1:/kafka kafka-2: image: confluentinc/cp-kafka:6.2.0 hostname: kafka2 depends_on: - zookeeper-1 - zookeeper-2 - zookeeper-3 environment: KAFKA_BROKER_ID: 2 KAFKA_ZOOKEEPER_CONNECT: zookeeper1:12181,zookeeper2:22181,zookeeper3:32181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:29092 KAFKA_LOG_DIRS: /kafka ports: - 29092:29092 volumes: - ./kafka/logs/2:/kafka kafka-3: image: confluentinc/cp-kafka:6.2.0 hostname: kafka3 depends_on: - zookeeper-1 - zookeeper-2 - zookeeper-3 environment: KAFKA_BROKER_ID: 3 KAFKA_ZOOKEEPER_CONNECT: zookeeper1:12181,zookeeper2:22181,zookeeper3:32181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:39092 KAFKA_LOG_DIRS: /kafka ports: - 39092:39092 volumes: - ./kafka/logs/3:/kafka
설정한 docker-compose를 통해서 실행
$ docker-compose -f docker-compose-confluent-cluster.yml up -d
3. Docker Log
- Zookeeper와 Broker가 제대로 실행되었는지 확인이 필요하기 때문에 아래 명령어를 쳐 확인하여 줍니다.
#log $ docker container logs zookeeper1 $ docker container logs kafka1
# Enter container $ docker exec -i -t kafka1 bash # check $ docker ps -a
4. Confluent CLI
- Confluent Kafka CLI를 설치하여 줍니다.
- 'Permission Denied' 라는 Error문구가 보이면 sudo 명령어를 붙여주시면 됩니다. 참고
# https://www.confluent.io/installation/ -> Community -> Tar $ sudo wget https://www.confluent.io/installation/confluent-community-7.2.0.tar $ sudo tar xvfz confluent-community-7.2.0.tar
5. Topic
- CLI를 이용하여 Topic을 확인하여 봅니다.
- kafka-topics --bootstrap-server 는 기본 옵션입니다. ( 참고 )
# Create Topic $ cd bin $ ./kafka-topics --bootstrap-server localhost:19092 --create --topic test-topic --partitions 2 --replication-factor 3 # Topic check $ ./kafka-topics --bootstrap-server localhost:19092 --list
6. Producer and Consumer
- 이제부터 test_topic을 이용하여 data를 Produce(send) 하고 Consume하는 과정을 보여드리겠습니다.
# Start Producer $ ./kafka-console-producer --bootstrap-server localhost:19092 --topic test-topic
# Start Consumer $ ./kafka-console-consumer --bootstrap-server localhost:19092 --topic test-topic # all Message Consume $ kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test_topic --from-beginning
7. CLI Description
- --zookeeper : zookeeper가 실행 중인 호스트
- --list : 리스트
- --create : topic 생성
- --topic : topic 명
- --partitions : topic 파티션 수
- --replication-factor : topic 복사본 수
$ ./zookeeper-shell localhost:12181 $ ls / $ ls /brokers
$ ./kafka-topics --bootstrap-server localhost:19092 --list
$ ./kafka-topics --bootstrap-server localhost:19092 --create --topic test-topic --partitions 2 --replication-factor 3
$ ./kafka-topics --describe --bootstrap-server localhost:19092 --topic test-topic
Reference
'개발 > Kafka' 카테고리의 다른 글
[Kafka] - 18. KAFKA_LISTENERS vs KAFKA_ADVERTISED_LISTENERS (0) 2022.08.23 [Kafka] - 16. Kafka 설치 (0) 2022.08.18 [Kafka] - 15. EOS Transaction (0) 2022.08.10 [Kafka] - 14. EOS(Exactly Once Symantics) (0) 2022.08.10 [Kafka] - 13. Kafka Log File (0) 2022.08.10