ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

    https://www.confluent.io/installation/

    댓글

Designed by Tistory.