[Kafka] Docker 설치부터 Kafka Quick Start까지

최진민·2021년 10월 19일
1

Kafka

목록 보기
2/3
post-thumbnail

Windows OS에서 Docker 설치

Windows 환경에서 Docker를 설치해보자. (for Kafka)


🛴1. 가상화 사용 확인

  • 윈도우에서 Docker를 사용하기 위해서는 프로, 엔터, 에듀 Ver.이어야 한다. (no home)
  • Hyper-V 가상화 기능이 필요하다.
  • 작업관리자 (Ctrl + Alt + Del) > 성능 탭에서 가상화사용중인지 확인
    • If, 사용중이지 않다면 바이오스에서 설정가능하다. 참고 사이트


🚦2. Hyper-V

  • 가상화를 사용하도록 설정한 후, Hyper-V를 실행해야한다.
    1. "제어판 > 프로그램 > 프로그램 및 기능 > Windows 기능 켜기/끄기"에 접근
    2. Hyper-V 체크
    3. 컴퓨터 재실행
  • 제어판 > 관리 도구Hyper-V 관리자가 있다면 성공


🌕3. Docker for Windows 다운로드

  • 도커 허브에 접속하여 회원가입하고 Get Docker Desktop을 눌러 다운
  • 명령 프롬포트 (Ctrl + R > cmd 입력)에서 docker version을 입력
    • 성공


Docker를 통한 Kafka 환경 구축

로컬 환경(no cloud)에서Docker를 이용하여 Kafka 서버를 구축하는 방법에 대해 알아보자!


🎞1. 도커 이미지

  • Kafka 의 가장 인기많은 이미지인 wurstmeister/kafka를 선택하자.
    • wurstmeister/kafka 공식 문서로 가기
    • 공식 문서에서 요구하는 사전 준비 사항이 있다.


🎨2. 사전 준비

  1. docker-compose를 설치

    • Kafka는 항상 Zookeeper가 사전에 실행되어야 하기 때문에 compose를 통해 실행하는 것이 좋다.
    • 링크를 통해서 Docker를 다운받았다면 docker-compose는 설치된다.
  2. docker-composeKAFKA_ADVERTISED_HOST_NAME를 개발자 본인의 도커 호스트 IP와 맞도록 변경해야 한다.

    • 현재 docker-compose는 가장 기본적인 docker-compose.yml 파일이다.
    • 주의 : 멀티 브로커 환경을 사용하고자 한다면 호스트 IP로 localhost 또는 127.0.0.1과 같은 아이피를 사용하지 말자.
  3. 또 다른 Kafka 이미지를 커스텀하고 싶다면, docker-compose.yml에 환경 변수로써 추가하자.

    • 예를 들어, message.max.bytes와 같은 변수를 향상시키기 위해 KAFKA_MESSAGE_MAX_BYTES: 2000000와 같이 설정하고, 자동으로 설정되는 Topic을 끄기 위해 KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'를 설정.
  4. LOG4J_로 미리 설정된 환경 변수를 추가함으로써 KAFKAlog4j 사용을 커스터마이징 할 수 있다. 이는 log4j.properties와 매핑될 것이다.

    • 예를 들어, LOG$J_LOGGER_KAFKA_AUTHORIZER_LOGGER=DEBUG, authorizerAppender


👔3. docker-compose.yml 작성

  • Visual Studio Code를 이용하여 아래 내용과 같이 docker-compose.yml을 생성
    version: '2'
    services:
      zookeeper:
        image: wurstmeister/zookeeper
        ports:
          - "2181:2181"
      kafka:
        #build: .
        image: wurstemister/zookeeper
        ports:
          - "9092"
        environment:
          DOCKER_API_VERSION: 1.22
          KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
    • KAFKA_ADVERTISED_HOST_NAME는 사전 준비 두번째 사항에 따라 본인의 도커 호스트 IP와 동일하게 작성해야 한다. 하지만, 해당 블로그에서는 간단하게 환경을 구축하기 위해서 KAFKA_ADVERTISED_HOST_NAME 부분만 수정하여 싱글 브로커 환경으로 카프카를 생성할 것이다.
    • 작성된 파일은 편한 위치에 저장


🚘4. 실행 및 테스트

  • docker-compose.yml 파일 작성을 마치고 파일이 저장된 위치에서 compose를 실행해보자.
    • docker-compose up -d 명령어를 통해서 이미지 다운 완료를 가르키는 done이 떴으니 실제로 컨테이너가 실행되는지 확인해보자!
      • KafkaZookeeper 컨테이너가 실행되고 있다.
  • 필수!!! 링크를 활용하여 카프카 Quick Start를 경험해보자. (영어 울렁증인 당신 아래를 따라오자)


Kafka 다운로드 및 Quick Start

Kafka를 다운로드하고 실행해보자.


👼1. Kafka 다운로드

  • 링크를 통해 최신 Binary 압축 파일을 다운 받는다.
    • 필자는 2.13을 받았다. (docker-compose.yml가 있는 파일 경로)
    • 또한, Kafka는 스칼라로 개발되었기 때문에 시스템에 JVM(+8)이 설치되어 있어야 한다.
    • 다운로드받은 압축 파일을 해제하자.


🧛‍♂️2. Zookeeper 및 Kafka 실행

  • 필자는 Windows Poswershell를 이용하여 리눅스 환경에서 실행할 것이다.

  • ZookeeperKafka 클러스터의 데이터들을 관리하기 위해 사용되기 때문에 Kafka 실행 전, Zookeeper를 먼저 실행해야 한다.

  • kafka_2.13-3.0.0/bin

    • zookeeper-server-start.sh : Zookeeper 서버를 실행하는 파일
    • kafka-server-start.sh : Kafka 서버 실행 파일
  • kafka_2.13-3.0.0/config

    • zookeeper.properties
      • Zookeeper의 서버 설정 파일
      • 기본 포트 : clientPort=2181
    • server.properties
      • Kafka의 서버 설정 파일
  • bin/zookeeper-server-start.sh config/zookeeper.properties
    
    #(Another Windows PowerShell)
    bin/kafka-server-start.sh config/server.properties
    • 위와 같은 명령어를 통해 ZookeeperKafka를 실행하자.

    • ❓아래와 같은 오류가 뜬다면 WSL 2를 설치 또는 재설정해야한다.

      [0.003s][error][logging] Error opening log file '/c/Users/Manol/Downloads/kafka_2.13-2.7.0/kafka_2.13-2.7.0/bin/../logs/kafkaServer-gc.log': No such file or directory
      
      [0.003s][error][logging] Error opening log file '/c/Users/Manol/downloads/kafka_2.13-2.7.0/kafka_2.13-2.7.0/bin/../logs/zookeeper-gc.log': No such file or directory
      • 해결 참고 사이트에서는 WSL2 설치 및 여러 기술을 다운받을 수 있고 Kafka 실행 예제도 있다.
      • +진행 도중 여러 오류를 만나, Ubuntu 20.04 LTS 환경으로 바꿨다.


🤷‍♂️3. 메시지 생산/소비 예제 (Quick Start)

해당 예제는 오류를 만난 필자로 인해 Ubuntu 20.04 LTS 환경에서 작업한 내용이다.

  • Topic
    • Topic 관련 옵션이 궁금할 때 : bin/kafka-topics.sh --help (help 명령어)
    • Topic 생성 (또 다른 창을 열어야 한다.)
      bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
      • --create : 새로운 토픽 생성 옵션
      • --bootstrap-server
        • 연결할 Kafka 서버 (host : port)
        • 해당 옵션으로 인해, Zookeeper에 직접 연결할 필요가 없다.
      • --replication-factor
        • Partition 복제 수
        • 해당 옵션을 설정하지 않으면 기본값 사용
          • 기본값 : server.propertiesdefault.replication.factor로 설정 가능
      • --partitions
        • Topic이 생성되거나 변경될 때 Partition
        • 해당 옵션을 설정하지 않으면 기본값 사용
          • 기본값 : server.propertiesnum.partitions로 설정 가능
      • --topic
        • create, alter, describe, delete 옵션에 사용할 토픽 이름
        • Topic명은 큰따옴표("")로 묶고, 정규표현식이 가능하므로 \로 escape.
    • Topic 목록
      bin/kafka-topics.sh --list --bootstrap-server localhost:9092
    • Topic 상세정보
      bin/kafka-topics.sh --describe --topic test --bootstrap-server localhost:9092
    • Topic 삭제
      bin/kafka-topics.sh --delete --topic test --bootstrap-server localhost:9092
      • 토픽을 삭제하려면 server.propertiesdelete.topic.enable=true 설정으로 가능 + 서버 재시작
  • Producer
    • Producer 관련 옵션이 궁금할 때 : bin/kafka-console-producer.sh --help (help 명령어)
    • 메시지 생산
      bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
  • Consumer
    • Consumer 관련 옵션이 궁금할 때 : bin/kafka-console-consumer.sh --help (help 명령어)
    • 메시지 소비
      bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
      • --from-beginning
        • Consumer에게 설정된 offset이 없으므로 가장 최신의 메시지 대신 가장 먼저 도착한 메시지부터 읽도록 하는 옵션입니다.
  • 영상 예제
profile
열심히 해보자9999

0개의 댓글