UI for Apache Kafka is a free, open-source web UI
to monitor and manage Apache Kafka clusters.

 

Apache Kafka용 UI는 Apache Kafka 클러스터를 모니터링하고 관리하기 위한 무료 오픈 소스 웹 UI입니다.
대시보드를 사용하면 브로커, 주제, 파티션, consumer와 같은 Kafka 클러스터의 메트릭을 추적할 수 있습니다.
Apache Kafka용 UI는 Kafka 데이터를 시각화합니다. 로컬 또는 클라우드에서 실행할 수 있습니다.

 

특징

  • 다중 클러스터 관리 — 모든 클러스터를 한 곳에서 모니터링 및 관리
  • 메트릭 대시보드를 통한 성능 모니터링 — 대시보드로 주요 Kafka 메트릭 추적
  • Kafka Broker 보기 — 주제 및 파티션 할당, 컨트롤러 상태 보기
  • Kafka 주제 보기 — 파티션 수, 복제 상태 및 사용자 정의 구성 보기
  • 소비자 그룹 보기 — 파티션별 고정 오프셋, 결합 및 파티션별 지연 보기
  • 메시지 찾아보기 — JSON, 일반 텍스트 및 Avro 인코딩으로 메시지 찾아보기
  • 동적 주제 구성 — 동적 구성으로 새 주제 생성 및 구성
  • 구성 가능한 인증 — Github/Gitlab/Google OAuth 2.0(옵션)으로 설치 보안

시작하기

Apache Kafka용 UI를 실행하려면 사전 빌드된 Docker 이미지를 사용하거나 로컬에 빌드할 수 있습니다.

 

[ 수행환경 ]

- Microsoft Windows 10 Pro(10.0.19041 N/A 빌드 19041)

- WSL 2

- zookeeper : 3.6.3

- kafka broker : 

 

 

 

Docker Image 실행

Apache Kafka용 UI의 공식 Docker 이미지는 다음 위치에서 호스팅됩니다.hub.docker.com/r/provectuslabs/kafka-ui.
백그라운드에서 Docker 컨테이너를 시작합니다.

docker run -p 8080:8080 \
	-e KAFKA_CLUSTERS_0_NAME=local \
	-e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092 \
	-d provectuslabs/kafka-ui:latest


http://localhost:8080.에서 웹 UI에 접속합니다.
환경 변수를 사용한 추가 구성은 환경 변수 참조합니다.- see environment variables

 

위와 같이 환경변수를 설정했을 때, 카프카 UI 접속 시 UI 화면은 보이지만, borker, topic 등에 대한 정보가 정상적으로 보이지 않았습니다. 그래서 2가지를 수정했는데, 수정 후 재기동 하니 정상적으로 보였습니다.

 

첫번 째 수정한 부분

카프카 브로커의 server.properties 에서 listeners 내용을 수정했습니다. 

기존 0.0.0.0 에서 WSL 의 IP Address로 변경했습니다. 수정 후 카프카 브로커를 재기동합니다.

# listeners=PLAINTEXT://0.0.0.0:9092

## 아래처럼 WSL IP Address로 수정
listeners=PLAINTEXT://172.24.121.239:9092

 

두번 째 수정한 부분

카프카 UI 의 환경변수 중 KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=0.0.0.0:9092 부분을 KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=172.24.118.82:9093 로 수정했습니다. 여기서의 IP는 WSL 의 IP 이자 카프카 브로커에서 설정한 listeners IP와 동일한 IP 입니다. 

수정 후 실행된 컨테이너가 있으면 중지시키고 카프카 UI 컨테이너를 실행합니다.

여기에서 8080 port가 사용 중이라고 나올 경우, 카프카 브로커에서 admin port를 사용할 가능성이 크므로 카프카 브로커의 admin port를 변경하던지, UI 컨테이너의 앞 쪽 port를 변경합니다. 필자의 경우에 port 충돌이 발생해서 카프카 브로커의 admin port를 disable 시켰습니다.

docker run -p 8080:8080 \
	-e KAFKA_CLUSTERS_0_NAME=local \
	-e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=172.24.118.82:9092 \
	-d provectuslabs/kafka-ui:latest

[ 참고 ]

필자의 경우에는 zookeeper cluster와도 연동되어 있고 podman을 사용해서 아래와 같이 수행했습니다. 주키퍼를 사용하는 경우 참고하면 될 것 같습니다.

podman run -p 8080:8080 --name ui_kafka --rm \
	-e KAFKA_CLUSTERS_0_NAME=local \
	-e KAFKA_CLUSTERS_0_ZOOKEEPER=172.24.118.82:2181,172.24.118.82:2182,172.24.118.82:2183 \
	-e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=172.24.118.82:9093,172.24.118.82:9094,172.24.118.82:9095 \
	-d provectuslabs/kafka-ui:latest

 

 

 

위 사항을 수정한 후 UI for Apache Kafka 에 접속한 화면입니다. clusters, Brokers, Topics 등에 대한 정보가 잘 표시됩니다.

Topic을 하나 생성한 후 카프카 브로커에서 조회해 봅니다. topic 이름은 ui_topic 이름으로 설정하고 partitions은 3, Replication Factor도 3으로 설정한 후 생성했습니다.

카프카 브로커 명령어로 topic을 조회해 봅니다. 3대 모두 정상적으로 조회가 되고 있습니다.

$ bin/kafka-topics.sh --list --bootstrap-server 172.24.118.82:9092
ui_topic
$ bin/kafka-topics.sh --list --bootstrap-server 172.24.118.82:9093
ui_topic
$ bin/kafka-topics.sh --list --bootstrap-server 172.24.118.82:9094
ui_topic

카프카 브로커 명령어로 topic을 생성한 후 UI 화면으로 조회해 봅니다.

$ bin/kafka-topics.sh create --topic my-kafka-topic --bootstrap-server 172.24.118.82:9092 --part
itions 3 --replication-factor 3

Created topic my-kafka-topic.

아래 화면처럼 정상적으로 조회됩니다.

 

참고 : UI for Apache kafka 환경변수

yml 파일의 각 변수를 환경 변수로 설정할 수 있습니다. 예를 들어 환경 변수를 사용하여 name 매개변수를 설정하려면 KAFKA_CLUSTERS_2_NAME과 같이 작성할 수 있습니다.

SERVER_SERVLET_CONTEXT_PATH URI basePath
LOGGING_LEVEL_ROOT Setting log level (trace, debug, info, warn, error). Default: info
LOGGING_LEVEL_COM_PROVECTUS Setting log level (trace, debug, info, warn, error). Default: debug
SERVER_PORT Port for the embedded server. Default: 8080
KAFKA_ADMIN-CLIENT-TIMEOUT Kafka API timeout in ms. Default: 30000
KAFKA_CLUSTERS_0_NAME Cluster name
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS Address where to connect
KAFKA_CLUSTERS_0_ZOOKEEPER Zookeeper service address
KAFKA_CLUSTERS_0_KSQLDBSERVER KSQL DB server address
KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL Security protocol to connect to the brokers. For SSL connection use "SSL", for plaintext connection don't set this environment variable
KAFKA_CLUSTERS_0_SCHEMAREGISTRY SchemaRegistry's address
KAFKA_CLUSTERS_0_SCHEMAREGISTRYAUTH_USERNAME SchemaRegistry's basic authentication username
KAFKA_CLUSTERS_0_SCHEMAREGISTRYAUTH_PASSWORD SchemaRegistry's basic authentication password
KAFKA_CLUSTERS_0_SCHEMANAMETEMPLATE How keys are saved to schemaRegistry
KAFKA_CLUSTERS_0_JMXPORT Open jmxPosrts of a broker
KAFKA_CLUSTERS_0_READONLY Enable read-only mode. Default: false
KAFKA_CLUSTERS_0_DISABLELOGDIRSCOLLECTION Disable collecting segments information. It should be true for confluent cloud. Default: false
KAFKA_CLUSTERS_0_KAFKACONNECT_0_NAME Given name for the Kafka Connect cluster
KAFKA_CLUSTERS_0_KAFKACONNECT_0_ADDRESS Address of the Kafka Connect service endpoint
KAFKA_CLUSTERS_0_JMXSSL Enable SSL for JMX? true or false. For advanced setup, see kafka-ui-jmx-secured.yml
KAFKA_CLUSTERS_0_JMXUSERNAME Username for JMX authentication
KAFKA_CLUSTERS_0_JMXPASSWORD Password for JMX authentication

+ Recent posts