DEV Community

Cover image for Kafka UI in Action: Monitoring and Managing Kafka Like a Pro
Kneonix
Kneonix

Posted on

Kafka UI in Action: Monitoring and Managing Kafka Like a Pro

Why You Need to Monitor Your Kafka Broker

Recently, I was working with Apache Kafka as the message broker for a microservice architecture. I quickly realized that it can be difficult to verify if Kafka is running correctly, especially when the rest of your application hasn’t finished connecting. In scenarios like this, a monitoring tool can be incredibly helpful and that’s where Kafka UI shines.

Image description

What Can You Do With Kafka UI?

Kafka UI is a powerful, lightweight monitoring tool for Apache Kafka. Here's what it offers out of the box:

  • Multi-Cluster Management : Monitor and manage multiple Kafka clusters in one place.
  • Performance Monitoring with Metrics Dashboard : Track essential Kafka metrics through an intuitive dashboard.
  • View Kafka Brokers : Inspect topic and partition assignments, controller status, and broker metadata.
  • View Kafka Topics : See partition count, replication status, and custom topic configurations.
  • View Consumer Groups : Monitor per-partition parked offsets and consumer lag (combined and per partition).
  • Browse Messages : View Kafka messages in JSON, plain text, or Avro formats.
  • Dynamic Topic Configuration : Create and configure new topics dynamically.
  • Configurable Authentication : Secure the UI using GitHub, GitLab, or Google OAuth 2.0.
  • Custom Serialization/Deserialization Plugins : Use built-in serializers like AWS Glue or Smile, or implement your own.
  • Role-Based Access Control (RBAC) : Manage fine-grained access permissions to the UI.
  • Data Masking : Obfuscate sensitive data in topic messages.

How to Set Up a Kafka Broker in Your System

You can run Kafka and Zookeeper in two main ways: Docker and Kubernetes.

Option 1: Docker

Here’s a simple docker-compose.yml setup:

version: "3.8" services: zookeeper: image: confluentinc/cp-zookeeper:latest container_name: zookeeper ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 kafka: image: confluentinc/cp-kafka:latest container_name: kafka ports: - "9092:9092" depends_on: - zookeeper environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false" 
Enter fullscreen mode Exit fullscreen mode

Run:

docker-compose up -d 
Enter fullscreen mode Exit fullscreen mode

Option 2: Kubernetes

Create two YAML files: zookeeper.depl.yaml and kafka.depl.yaml.

zookeeper.depl.yaml

apiVersion: apps/v1 kind: Deployment metadata: name: zookeeper-depl spec: replicas: 1 selector: matchLabels: app: zookeeper template: metadata: labels: app: zookeeper spec: containers: - name: zookeeper image: confluentinc/cp-zookeeper:latest ports: - containerPort: 2181 env: - name: ZOOKEEPER_CLIENT_PORT value: "2181" - name: ZOOKEEPER_TICK_TIME value: "2000" --- apiVersion: v1 kind: Service metadata: name: zookeeper-srv spec: selector: app: zookeeper ports: - name: zookeeper protocol: TCP port: 2181 targetPort: 2181 
Enter fullscreen mode Exit fullscreen mode

kafka.depl.yaml

apiVersion: apps/v1 kind: Deployment metadata: name: kafka-broker-depl spec: replicas: 1 selector: matchLabels: app: kafka-broker template: metadata: labels: app: kafka-broker spec: containers: - name: kafka-broker image: confluentinc/cp-kafka:latest ports: - containerPort: 9092 env: - name: KAFKA_BROKER_ID value: "1" - name: KAFKA_ZOOKEEPER_CONNECT value: "zookeeper-srv:2181" - name: KAFKA_ADVERTISED_LISTENERS value: PLAINTEXT://kafka-broker-srv:9092 - name: KAFKA_LISTENERS value: PLAINTEXT://0.0.0.0:9092 - name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR value: "1" - name: KAFKA_AUTO_CREATE_TOPICS_ENABLE value: "false" --- apiVersion: v1 kind: Service metadata: name: kafka-broker-srv spec: selector: app: kafka-broker ports: - name: kafka-broker protocol: TCP port: 9092 targetPort: 9092 
Enter fullscreen mode Exit fullscreen mode

Apply them by these command:

kubectl apply -f zookeeper.depl.yaml kubectl apply -f kafka.depl.yaml 
Enter fullscreen mode Exit fullscreen mode

How to Set Up Kafka UI

You can deploy Kafka UI via Docker or Kubernetes as well.

Option 1: Docker

Add this to your docker-compose.yml file:

kafka-ui: image: provectuslabs/kafka-ui:latest container_name: kafka-ui ports: - "8080:8080" depends_on: - kafka environment: KAFKA_CLUSTERS_0_NAME: "local" KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: "kafka:9092" 
Enter fullscreen mode Exit fullscreen mode

Then run:

docker-compose up -d 
Enter fullscreen mode Exit fullscreen mode

Option 2: Kubernetes

Create a kafkaUI.depl.yaml file:

apiVersion: apps/v1 kind: Deployment metadata: name: kafka-ui-depl spec: replicas: 1 selector: matchLabels: app: kafka-ui template: metadata: labels: app: kafka-ui spec: containers: - name: kafka-ui image: provectuslabs/kafka-ui:latest ports: - containerPort: 8080 env: - name: KAFKA_CLUSTERS_0_NAME value: "local" - name: KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS value: "kafka-broker-srv:9092" --- apiVersion: v1 kind: Service metadata: name: kafka-ui-srv spec: selector: app: kafka-ui ports: - name: kafka-ui protocol: TCP port: 8080 targetPort: 8080 
Enter fullscreen mode Exit fullscreen mode

Apply it:

kubectl apply -f kafkaUI.depl.yaml 
Enter fullscreen mode Exit fullscreen mode

Viewing the UI

If you’re running this on Kubernetes, forward the port:

kubectl port-forward service/kafka-ui-srv 8080:8080 
Enter fullscreen mode Exit fullscreen mode

Then open your browser and go to http://localhost:8080 to monitor and manage your Kafka broker, topics, and consumer groups.

Learn More

Top comments (1)

Collapse
 
_mohamadmohamadi profile image
Mohamad

so helpful
thanks for sharing that❤️