개요

Kafka를 사용하다보면 UI가 필요할 때가 있습니다. 이때 Provectuslabs에서 제공하는 Kafka UI를 사용해보고자 합니다.

Kafka UI란?

Kafka UI는 Kafka 클러스터를 모니터링하고 관리하기 위한 웹 인터페이스입니다. 이를 통해 토픽, 컨슈머 그룹, 메시지를 모니터링하고 관리할 수 있습니다. 대표적으로 Confluent Control Center, Burrow, Kafka Manager, Provectuslabs Kafka UI 등이 있습니다.

  • Confluent Control Center : Confluent에서 제공하는 Kafka 모니터링 및 관리 도구
  • Burrow : LinkedIn에서 제공하는 Kafka 컨슈머 오프셋 모니터링 도구
  • Kafka Manager : Yahoo에서 제공하는 Kafka 클러스터 관리 도구
  • AKHQ : Kafka HQ에서 제공하는 Kafka 클러스터 모니터링 및 관리 도구
  • Provectuslabs Kafka UI : Provectuslabs에서 제공하는 Kafka 클러스터 모니터링 및 관리 도구

Provectuslabs Kafka UI

Provectuslabs에서 제공하는 Kafka UI는 Kafka 클러스터를 모니터링하고 관리하기 위한 웹 인터페이스입니다. 다른 Kafka UI도 비슷한 기능을 제공하지만, Provectuslabs Kafka UI는 다음과 같은 특징을 가지고 있습니다.

  • 토픽, 컨슈머 그룹, 메시지를 모니터링하고 관리할 수 있습니다.
  • 토픽의 메시지를 검색하고, 메시지를 전송할 수 있습니다.
  • 스키마 레지스트리를 관리할 수 있습니다.
  • Kafka Connect를 모니터링하고, 커넥터를 관리할 수 있습니다.
  • KSQL 쿼리를 실행하고, KSQL 서버를 관리할 수 있습니다.

다양한 Kafka UI들이 있고 각각의 특징이 있지만, Provectuslabs Kafka UI는 다양한 기능을 제공하면서도 사용하기 쉽고 직관적인 UI를 제공한다고 생각하고 있고 문서화도 상대적으로 잘 되어있다고 생각합니다.

Provectuslabs Kafka UI Docs

Provectuslabs Kafka UI 사용해보기

Provectuslabs Kafka UI를 사용해보기 위해서는 Docker를 통해 간단하게 실행할 수 있습니다. Kafka UI이기 때문에 Kafka 클러스터가 필요하며, Docker를 통해 Kafka 클러스터를 실행하고 Kafka UI를 실행해보겠습니다.

Kafka 클러스터 실행

Kafka 클러스터를 실행하기 위해서는 Docker-Compose 파일을 작성하겠습니다.

 1version: "2"
 2
 3services:
 4  kafka-0:
 5    image: docker.io/bitnami/kafka:3.7
 6    ports:
 7      - "9092:9092"
 8    environment:
 9      # KRaft settings
10      - KAFKA_CFG_NODE_ID=0
11      - KAFKA_CFG_PROCESS_ROLES=controller,broker
12      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-0:9093,1@kafka-1:9093,2@kafka-2:9093
13      - KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv
14      # Listeners
15      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
16      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka-0:9092
17      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
18      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
19      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT
20      # Clustering
21      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3
22      - KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3
23      - KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2
24    volumes:
25      - kafka_0_data:/bitnami/kafka
26    networks:
27      - kafka-network
28  kafka-1:
29    image: docker.io/bitnami/kafka:3.7
30    ports:
31      - "9093:9092"
32    environment:
33      # KRaft settings
34      - KAFKA_CFG_NODE_ID=1
35      - KAFKA_CFG_PROCESS_ROLES=controller,broker
36      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-0:9093,1@kafka-1:9093,2@kafka-2:9093
37      - KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv
38      # Listeners
39      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
40      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka-1:9092
41      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
42      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
43      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT
44      # Clustering
45      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3
46      - KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3
47      - KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2
48    volumes:
49      - kafka_1_data:/bitnami/kafka
50    networks:
51      - kafka-network
52  kafka-2:
53    image: docker.io/bitnami/kafka:3.7
54    ports:
55      - "9094:9092"
56    environment:
57      # KRaft settings
58      - KAFKA_CFG_NODE_ID=2
59      - KAFKA_CFG_PROCESS_ROLES=controller,broker
60      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-0:9093,1@kafka-1:9093,2@kafka-2:9093
61      - KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv
62      # Listeners
63      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
64      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka-2:9092
65      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
66      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
67      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT
68      # Clustering
69      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3
70      - KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3
71      - KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2
72    volumes:
73      - kafka_2_data:/bitnami/kafka
74    networks:
75      - kafka-network
76
77volumes:
78  kafka_0_data:
79    driver: local
80  kafka_1_data:
81    driver: local
82  kafka_2_data:
83    driver: local
84
85networks:
86  kafka-network:
87    driver: bridge

Kafka UI 실행

Kafka UI를 실행하기 위해서 같은 docker network를 공유 해야하기에 –network 옵션을 통해 같은 네트워크에 연결해주겠습니다.

1docker run -d -it --rm --network=kafka_kafka-network --name kafka-ui -p 8080:8080 \
2-e DYNAMIC_CONFIG_ENABLED=true \
3-e KAFKA_CLUSTERS_0_NAME=local-cluster \
4-e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka-kafka-0-1:9092,kafka-kafka-1-1:9092,kafka-kafka-2-1:9092 \
5provectuslabs/kafka-ui:latest
  • DYNAMIC_CONFIG_ENABLED: 동적 설정 활성화 여부, 이 설정을 하지 않을 경우에는 UI상에서 기존에 설정한 클러스터 정보를 변경할 수 없습니다.
  • KAFKA_CLUSTERS_0_NAME: 클러스터 이름 (임의로 설정)
  • KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: Kafka 클러스터의 부트스트랩 서버 주소, 여러개의 주소를 설정할 경우 콤마(,)로 구분합니다.

Kafka UI 접속

정상적으로 설정이 된다면 http://localhost:8080 으로 접속해서 broker 탭을 클릭시 아래와 같은 화면을 보실 수 있습니다.

img.png

현재는 브로커만 설정하고 실행했기 때문에 브로커만 보이지만, 토픽, 컨슈머 그룹, 메시지, 스키마 레지스트리, Kafka Connect, KSQL, ACL 등 다양한 기능을 사용할 수 있습니다.

img.png

정리

Provectuslabs Kafka UI를 사용해보았습니다. Kafka 클러스터를 모니터링하고 관리하기 위한 다양한 기능을 제공하고 있으며, 사용하기 쉽고 직관적인 UI를 제공하고 있습니다. 다양한 Kafka UI들이 있지만, Provectuslabs Kafka UI도 사용해보시면 좋을 것 같습니다.