카테고리 없음

분산처리 환경 구성 1. KAFKA, with docker

blogger 2021. 8. 13. 13:29


카프카를 실행하기 위해 우선 주키퍼를 만들어준다.

 

주키퍼가 기동된 이후 카프카가 구동되도록 한다.

카프카 이미지가 여러개 있는데, 그 중 컴포즈 파일에서 초기 토픽 생성을 할 수 있도록 해주는 이미지를 사용하였다.

(구글링해서 나오는 카프카 예제 중 상당수가 해당 이미지를 사용하고 있어서..)

 

다음 내용처럼 docker-compose 파일을 작성한다.

서비스 구성은 zookeeper, kafka, kafka-manager 이고, 적절히 healthcheck를 하도록 하였다.

kafka 는 초기 구동시 토픽 mytopic1, mytopic2 를 생성하도록 하였다.

version: '2.4'

networks:
  kafka_network:

services:

  zookeeper:
    image: zookeeper:3.4.14
    container_name: zookeeper
    hostname: zookeeper.myserver.com
    ports:
      - 2181:2181
    environment:
      SERVER_JVMFLAGS: -Xmx256m
      ZOO_LOG4J_PROP: "INFO,ROLLINGFILE,CONSOLE"
    healthcheck:
      test: nc -z localhost 2181 || exit 1
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 10s
    networks:
      - kafka_network

  kafka:
    image: wurstmeister/kafka:2.13-2.6.0
    container_name: kafka
    hostname: kafka.myserver.com
    ports:
      - 9092:9092
      - 9093:9093
    expose:
      - 9082
    environment:
      KAFKA_HEAP_OPTS: "-Xms128m -Xmx256m"
      KAFKA_BROKER_ID: 1
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9082,OUTSIDE://kafka.myserver.com:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENERS: INSIDE://0.0.0.0:9082,OUTSIDE://0.0.0.0:9092
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
      KAFKA_CREATE_TOPICS: "mytopic1:4:1,mytopic2:4:1"
      KAFKA_HEAP_OPTS: "-Xmx256m -Xms256m"
      JMX_PORT: 9093
      KAFKA_JMX_OPTS: -Dlog4j.logger.org.apache.kafka.common.network.Selector=ERROR
                      -Dcom.sun.management.jmxremote=true 
                      -Dcom.sun.management.jmxremote.authenticate=false 
                      -Dcom.sun.management.jmxremote.ssl=false 
                      -Djava.rmi.server.hostname=kafka.myserver.com
                      -Dcom.sun.management.jmxremote.rmi.port=9393 
                      -Djava.net.preferIPv4Stack=true
    depends_on:
      zookeeper:
        condition: service_healthy
    healthcheck:
      test: nc -z localhost 9092 || exit 1
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 10s
    networks:
      - kafka_network

  cmak:
    image: hlebalbau/kafka-manager:stable
    restart: always
    command:
      - "-Dcmak.zkhosts=zookeeper:2181"
      - "-DbasicAuthentication.enabled=true"
      - "-DbasicAuthentication.username=admin"
      - "-DbasicAuthentication.password=password"
    ports:
      - 9000:9000
    depends_on:
      zookeeper:
        condition: service_healthy
    networks:
      - kafka_network

 

컨테이너를 실행하면 다음과 같이 잘 동작하는 것을 볼 수 있다.

이제 kafka-manager에서 kafka 설정을 하도록 하자.

 

cmak에서 포트를 9000으로 하였으니, 컨테이너를 구동한 호스트의 해당 포트로 접속한다.

접속정보는 컴포즈 파일을 보면 admin/password 로 설정하였으니, 해당 정보로 접속을 하자.

 

CMAK 접속 화면

 

초기에는 다음과 같이 카프카 정보를 볼 수 없으므로, 관리 대상 카프카 정보로 클러스터를 생성하여 준다.

[Cluster -> Add Cluster 메뉴를 사용한다.]

 

 

만일 클러스터 목록을 추가하는 과정에서 다음과 같은 에러가 발생할 경우에는 주키퍼 콘솔을 통해 kafka-manager에서 사용할 공간을 직접 생성해 준 후, kafka-manager를 재기동한다.

Yikes! KeeperErrorCode = Unimplemented for /kafka-manager/mutex Try again. 

 

$ zkCli.sh

create /kafka-manager/mutex ""
create /kafka-manager/mutex/locks ""
create /kafka-manager/mutex/leases ""

 

 

Kafka-manager가 재기동 된 후 다시 웹페이지에 접속해보면 다음과 같이 카프카 브로커의 정보를 확인할 수 있다.

CMAK 에서 Kafka broker 정보 조회 화면

 

 

참조 자료

CMAK repo : https://github.com/yahoo/CMAK

CMAK docker image : https://github.com/hleb-albau/kafka-manager-docker

CMAK (Kafka manager) 에 대한 개요 및 사용 방법 : https://server-engineer.tistory.com/759
Kafka-manager mutex 관련 에러 발생 처리 : https://github.com/occidere/TIL/issues/163

 

 

 

 

방문해 주셔서 감사합니다!
정보가 도움이 되셨다면
로그인하지 않아도 누룰 수 있는
아래의 ♡(좋아요)를 꾹~ 눌러주세요 ♥♥♥