ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • docker 로 kafka 설치
    docker 2021. 12. 22. 23:43

    https://github.com/wurstmeister/kafka-docker 를 이용해 kafka 를 설치한다.

    https://github.com/windbird123/kafka-docker 에는 아래의 수정이 적용되어 있어 docker-compose.yml 의 volumes 항목만 수정해 바로 docker-compose 로 실행할 수 있다.

    kafka-docker clone

    git clone https://github.com/wurstmeister/kafka-docker.git

    Dockerfile 수정

    # 설치할 kafka, scala 버전을 변경해 준다.
    # https://github.com/wurstmeister/kafka-docker#tags-and-releases 참고
    ARG kafka_version=2.4.1
    ARG scala_version=2.12
    
    # docker-compose.yml 에서 /kafka mount 위치를 명시적으로 지정하도록 수정할 예정이므로
    # VOLUME 부분을 주석 처리해 준다. 
    
    #VOLUME ["/kafka"]

    docker-compose.yml 수정

    kafka 항목에 environment, volumes 를 아래와 같이 수정한다.

     kafka:
        build: .
        ports:
          # 명시적으로 9092->9092 port 를 연결
          - "9092:9092"
        environment:
          DOCKER_API_VERSION: 1.22
          # 현재 host 의 hostname(or ip)
          KAFKA_ADVERTISED_HOST_NAME: localhost
          
          # LEADER_NOT_AVAILABLE 가 발생할 경우
          # 참고: https://17billion.github.io/kafka/2017/09/01/kafka_leader_not_available.html
          KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://localhost:9092'
          
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
          
          # 기타 환경 설정
          KAFKA_MESSAGE_MAX_BYTES: 10000000
          KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
          KAFKA_DELETE_TOPIC_ENABLE: 'true'
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          
          # kafka 데이터를 저장할 위치를 명시적으로 마운트 한다.
          - /mydir/kafka/data:/kafka

    docker-compose 실행

    # 최신 버전 docker 가 설치되었다면
    docker compose up -d
    
    # 혹은 docker-compose 가 설치되었다면
    docker-compose up -d

    kafka 동작 테스트

    kafka download

    Dockerfile 에 정의한 kafka, scala 버전과 일치하는 kafka 를 다운로드 한다.

    wget https://archive.apache.org/dist/kafka/2.4.1/kafka_2.12-2.4.1.tgz
    tar xvfz kafka_2.12-2.4.1.tgz

    topic 생성

    test 이름으로 topic 을 생성한다.

    cd kafka_2.12-2.4.1/
    bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 4 --topic test

    consumer 실행

    test topic 을 consume 하는 consumer 를 실행한다.

    bin/kafka-console-consumer.sh --topic test --bootstrap-server localhost:9092 --from-beginning

    producer 실행

    새로운 터미널을 열어 producer 를 실행한다.

    bin/kafka-console-producer.sh --topic test --broker-list localhost:9092

    producer 와 consumer 연동 확인

    • producer 가 실행된 터미널 abc123 입력후 엔터
    • consumer 터미널에서 abc123 을 읽어 출력되는 것 확인

    (참고) topic 삭제

    bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test

    댓글

Designed by Tistory.