본문 바로가기
카테고리 없음

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

by blogger 2021. 8. 13.


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

 

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

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

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

 

다음 내용처럼 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

 

 

 

 

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