카프카 모니터링 툴 설치

UI for Kafka를 사용

https://github.com/provectus/kafka-ui

docker 이미지 pull

docker pull provectuslabs/kafka-ui

docker image 확인

docker image ls

docker compose

Docker Compose는 여러 컨테이너를 가지는 애플리케이션을 통합적으로 Docker 이미지를 만들고, 만들어진 각각의 컨테이너를 시작 및 중지하는 등의 작업을 더 쉽게 수행할 수 있도록 도와주는 도구

docker-compose.yml 이 필요함

mkdir ui-for-kafka

vim docker-compose.yml

github yml 참조

version: "2"
services:
  kafka-ui:
    image: provectuslabs/kafka-ui
    container_name: kafka-ui
    ports:
      - "8080:8080"
    restart: always
    environment:
      - KAFKA_CLUSTERS_0_NAME=local
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092

이대로 실행하면? 제대로 붙지가 않음, 에러가 발생

물론 zookpeeper와 kafka는 실행이 되어있어야 함

config 설정

vim config/server.properties

#listeners=PLAINTEXT://:9092
#advertised.listeners=PLAINTEXT://your.host.name:9092
 
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://192.168.45.62:9092
  • listeners의 역할 : 내부에 연결할 IP, 카프카 브로커가 내부적으로 바인딩하는 주소
  • advertised.listeners의 역할: 카프카 클라이언트나 커맨드 라인 툴을 브로커와 연결할 때 사용

docker-compose.yml 설정대로 하면 연결이 안되는 이유

docker - localhost 연결

container-localhost

  • localhost 9092로 연결하려고 시도!
    • 하지만 docker container내에 있는 localhost에 연결을 하게됨
    • 진짜 localhost가 어디인지 알려주자!

extra_hosts와 host.docker.internal

  • host.docker.internal를 사용해야 진짜 localhost에 접근이 가능함
  • host.docker.internal 를 위해서는 host-gateway가 필요
  • host-gateway를 사용해서 도커 컨테이너와 로컬을 연결하는 것

extra_host를 통해 host-gateway를 열어주고 host.docker.internal를 사용해준다

kafka-ui:
  image: provectuslabs/kafka-ui
  extra_hosts:
    - host.docker.internal:host-gateway
  container_name: kafka-ui
  ports:
    - "8080:8080"
  environment:
    - KAFKA_CLUSTERS_0_NAME=localhost-kafka
    - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=host.docker.internal:9092
    - KAFKA_CLUSTERS_0_ZOOKEEPER=host.docker.internal:2181