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.
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" Run:
docker-compose up -d 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 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 Apply them by these command:
kubectl apply -f zookeeper.depl.yaml kubectl apply -f kafka.depl.yaml 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" Then run:
docker-compose up -d 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 Apply it:
kubectl apply -f kafkaUI.depl.yaml Viewing the UI
If you’re running this on Kubernetes, forward the port:
kubectl port-forward service/kafka-ui-srv 8080:8080 Then open your browser and go to http://localhost:8080 to monitor and manage your Kafka broker, topics, and consumer groups.
Learn More
- GitHub: https://github.com/provectus/kafka-ui
- Documentation: https://docs.kafka-ui.provectus.io/

Top comments (1)
so helpful
thanks for sharing that❤️