{"id":80238,"date":"2026-06-26T11:08:16","date_gmt":"2026-06-26T05:38:16","guid":{"rendered":"https:\/\/www.tothenew.com\/blog\/?p=80238"},"modified":"2026-07-01T10:14:05","modified_gmt":"2026-07-01T04:44:05","slug":"kafka-monitoring-made-easy-with-kafdrop-a-practical-hands-on-guide","status":"publish","type":"post","link":"https:\/\/www.tothenew.com\/blog\/kafka-monitoring-made-easy-with-kafdrop-a-practical-hands-on-guide\/","title":{"rendered":"Kafka Monitoring Made Easy with Kafdrop: A Practical Hands-On Guide"},"content":{"rendered":"<h1>Introduction<\/h1>\n<p>Apache Kafka has become the backbone of modern event-driven architectures, powering everything from micro services communication to real-time analytics and stream processing.<\/p>\n<p>As Kafka deployments grow, developers and operators frequently need answers to questions such as:<\/p>\n<blockquote>\n<ul>\n<li>Are messages reaching Kafka successfully?<\/li>\n<li>Which partition received a message?<\/li>\n<li>Are consumers keeping up with producers?<\/li>\n<li>How much lag exists in a consumer group?<\/li>\n<li>How can I inspect Kafka messages without writing to a consumer?<\/li>\n<\/ul>\n<\/blockquote>\n<p>While Kafka provides powerful command-line tools, they can be cumbersome for day-to-day troubleshooting.<\/p>\n<p>This is where <strong>Kafdrop<\/strong> comes in.<\/p>\n<p>In this article, we&#8217;ll explore how to install Kafdrop, monitor Kafka topics, inspect messages, understand partition assignment, and perform basic topic administration using a real local Kafka setup.<\/p>\n<hr \/>\n<h1><\/h1>\n<h1>Environment Used in This Article<\/h1>\n<p>The examples and screenshots in this article were captured using the following setup:<\/p>\n<p>&nbsp;<\/p>\n<table style=\"border-collapse: collapse; width: 48.6371%;\">\n<tbody>\n<tr>\n<td style=\"width: 24.7871%;\"><strong>Component<\/strong><\/td>\n<td style=\"width: 23.85%;\"><strong>Version<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 24.7871%;\"><\/td>\n<td style=\"width: 23.85%;\"><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 24.7871%;\">Kafka<\/td>\n<td style=\"width: 23.85%;\">Local Broker<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 24.7871%;\">Kafdrop<\/td>\n<td style=\"width: 23.85%;\">4.2.0<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 24.7871%;\">Java<\/td>\n<td style=\"width: 23.85%;\">17+<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 24.7871%;\">Broker Address<\/td>\n<td style=\"width: 23.85%;\">localhost:9092<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h1><\/h1>\n<h1>What is Kafdrop?<\/h1>\n<blockquote><p>Kafdrop is an open-source web interface for Apache Kafka.<\/p>\n<p>It is a lightweight web UI for Apache Kafka that allows developers and operators to inspect topics, partitions, messages, consumer groups, offsets, and cluster health directly from a browser.<\/p><\/blockquote>\n<p>Instead of relying on different commands separately to monitor different components such as:<\/p>\n<blockquote><p><span style=\"color: #993300;\">kafka-topics.sh<\/span><\/p>\n<p><span style=\"color: #993300;\">kafka-consumer-groups.sh<\/span><\/p>\n<p><span style=\"color: #993300;\">kafka-console-consumer.sh<\/span><\/p><\/blockquote>\n<p>You can access Kafka through an intuitive browser-based UI.<\/p>\n<p>&nbsp;<\/p>\n<h3>Key Features of Kafdrop<\/h3>\n<blockquote>\n<ul>\n<li>\u00a0Topic Monitoring<\/li>\n<li>\u00a0Consumer Group Monitoring<\/li>\n<li>\u00a0Partition Visibility<\/li>\n<li>\u00a0Offset Tracking<\/li>\n<li>\u00a0Message Inspection<\/li>\n<li>\u00a0Consumer Lag Monitoring<\/li>\n<li>\u00a0Topic Configuration Viewing<\/li>\n<li>\u00a0Message Search<\/li>\n<li>\u00a0Topic Creation<\/li>\n<li>\u00a0Topic Deletion<\/li>\n<\/ul>\n<\/blockquote>\n<hr \/>\n<h1><\/h1>\n<h1>Running Kafdrop Using Docker<\/h1>\n<p>The simplest way to run Kafdrop is through Docker.<\/p>\n<blockquote><p><span style=\"color: #993300;\">docker run -d -p 9000:9000 -e KAFKA_BROKERCONNECT=localhost:9092\u00a0obsidiandynamics\/kafdrop<\/span><\/p><\/blockquote>\n<p>Open the application at <em>localhost:9092<\/em> and Kafdrop will connect to your Kafka broker.<\/p>\n<hr \/>\n<h1><\/h1>\n<h1>Running Kafdrop Locally Without Docker<\/h1>\n<p>&nbsp;<\/p>\n<h3>Step 1: Download the Kafdrop JAR<\/h3>\n<p>Download the latest Kafdrop release from the official GitHub releases page:<\/p>\n<p><a href=\"https:\/\/github.com\/obsidiandynamics\/kafdrop\/releases\/\">https:\/\/github.com\/obsidiandynamics\/kafdrop\/releases\/<\/a><\/p>\n<p>&nbsp;<\/p>\n<h3>Step 2: Start Kafdrop<\/h3>\n<p>After the above jar is downloaded in your system, launch Kafdrop by connecting it to your Kafka broker using the following command:<\/p>\n<blockquote><p><span style=\"color: #993300;\">java -jar kafdrop-4.2.0.jar &#8211;kafka.brokerConnect=localhost:9092<\/span><\/p><\/blockquote>\n<p>If Kafdrop starts successfully, you should see log messages similar to the following:<\/p>\n<div id=\"attachment_80339\" style=\"width: 635px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-80339\" decoding=\"async\" loading=\"lazy\" class=\"size-large wp-image-80339\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-28-at-11.23.40\u202fPM-1024x69.png\" alt=\"Starting Kafdrop | Terminal logs\" width=\"625\" height=\"42\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-28-at-11.23.40\u202fPM-1024x69.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-28-at-11.23.40\u202fPM-300x20.png 300w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-28-at-11.23.40\u202fPM-768x52.png 768w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-28-at-11.23.40\u202fPM-1536x103.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-28-at-11.23.40\u202fPM-624x42.png 624w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-28-at-11.23.40\u202fPM.png 1728w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><p id=\"caption-attachment-80339\" class=\"wp-caption-text\">Starting Kafdrop | Terminal logs<\/p><\/div>\n<h3><\/h3>\n<h3>Step 3: Accessing the Kafdrop Web UI<\/h3>\n<p>After the application has started (Step 2), open your browser and navigate to:<\/p>\n<blockquote><p>localhost:9000<\/p><\/blockquote>\n<hr \/>\n<h1><\/h1>\n<h1>Kafka Cluster Overview<\/h1>\n<p>After connecting Kafdrop to the Kafka broker, the dashboard displayed the following cluster overview.<\/p>\n<div id=\"attachment_80171\" style=\"width: 635px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-80171\" decoding=\"async\" loading=\"lazy\" class=\"size-large wp-image-80171\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.47.58\u202fPM-1024x711.png\" alt=\"Kafka Cluster Overview | Kafdrop\" width=\"625\" height=\"434\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.47.58\u202fPM-1024x711.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.47.58\u202fPM-300x208.png 300w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.47.58\u202fPM-768x533.png 768w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.47.58\u202fPM-1536x1066.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.47.58\u202fPM-2048x1422.png 2048w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.47.58\u202fPM-624x433.png 624w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><p id=\"caption-attachment-80171\" class=\"wp-caption-text\">Kafka Cluster Overview | Kafdrop<\/p><\/div>\n<p>&nbsp;<\/p>\n<h3>Understanding the Kafdrop Dashboard<\/h3>\n<p>At the top of the dashboard, you&#8217;ll see the <strong><span style=\"color: #993300;\"><em>Bootstrap Servers<\/em><\/span><\/strong> value, which in this example is <strong><em><span style=\"color: #993300;\">localhost:9092<\/span><\/em><\/strong>. This indicates that Kafdrop is successfully connected to the Kafka broker running on your local machine.<\/p>\n<p>Next, you&#8217;ll notice that the cluster contains 3 partitions for the <em><strong><span style=\"color: #993300;\">getting-started<\/span><\/strong><\/em> topic. These are <em><span style=\"color: #993300;\"><strong>Partition 0, Partition 1 and Partition 2<\/strong><\/span><\/em>.<\/p>\n<p>Another useful metric is the <span style=\"color: #993300;\"><em><strong>Preferred Partition Leader<\/strong><\/em><\/span>. In this example, all partitions are running on their preferred leader broker, resulting in a value of 100%. This indicates that the cluster is in a healthy state and leadership is balanced as expected.<\/p>\n<p>Finally, the dashboard displays the number of <span style=\"color: #993300;\"><em><strong>Under-Replicated Partitions<\/strong><\/em><\/span>, which is 0 in this environment. This means every partition replica is fully synchronised with its leader, indicating that the cluster is healthy.<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<h1><\/h1>\n<h1>Exploring a Kafka Topic<\/h1>\n<p>Clicking on the topic name opens the Topic Details page.<\/p>\n<div id=\"attachment_80173\" style=\"width: 635px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-80173\" decoding=\"async\" loading=\"lazy\" class=\"size-large wp-image-80173\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.53.06\u202fPM-1024x708.png\" alt=\"Kafka Topic\" width=\"625\" height=\"432\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.53.06\u202fPM-1024x708.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.53.06\u202fPM-300x207.png 300w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.53.06\u202fPM-768x531.png 768w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.53.06\u202fPM-1536x1062.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.53.06\u202fPM-2048x1416.png 2048w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.53.06\u202fPM-624x431.png 624w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><p id=\"caption-attachment-80173\" class=\"wp-caption-text\">Kafka Topic<\/p><\/div>\n<p>&nbsp;<\/p>\n<h3><\/h3>\n<h2>Topic Overview (<span style=\"color: #993300;\">getting-started<\/span>)<\/h2>\n<p>Below is the initial state of the topic:<\/p>\n<table style=\"border-collapse: collapse; width: 33.6457%;\">\n<tbody>\n<tr>\n<td style=\"width: 18.6542%;\"><strong>Metric<\/strong><\/td>\n<td style=\"width: 14.9915%;\"><strong>Value<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.6542%;\"><\/td>\n<td style=\"width: 14.9915%;\"><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.6542%;\">Partitions<\/td>\n<td style=\"width: 14.9915%;\">3<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.6542%;\">Preferred Replicas<\/td>\n<td style=\"width: 14.9915%;\">100%<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.6542%;\">Under Replicated Partitions<\/td>\n<td style=\"width: 14.9915%;\">0<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.6542%;\">Total Available Messages<\/td>\n<td style=\"width: 14.9915%;\">0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h1><\/h1>\n<h3>Publishing Text Messages to the above topic<\/h3>\n<p>To demonstrate how Kafka partitions messages based on their keys, I published a few sample messages to the <em><strong><span style=\"color: #993300;\">getting-started<\/span> <\/strong><\/em>topic using different message keys.<\/p>\n<p>The following messages were produced:<\/p>\n<blockquote><p><em>Key: a\u00a0 Value: first message<\/em><br \/>\n<em>Key: a\u00a0 Value: second message<\/em><br \/>\n<em>Key: b\u00a0 Value: first message<\/em><\/p><\/blockquote>\n<p>Notice that the first two messages use the same key (<em><span style=\"color: #993300;\"><strong>a<\/strong><\/span><\/em>), while the third message uses a different key (<em><span style=\"color: #993300;\"><strong>b<\/strong><\/span><\/em>). This is intentional because Kafka&#8217;s default partitioner routes messages with the same key to the same partition. As a result, messages with key (<em><span style=\"color: #993300;\"><strong>a<\/strong><\/span><\/em>)\u00a0should be stored in the same partition and maintain their order, whereas the message with key (<em><span style=\"color: #993300;\"><strong>b<\/strong><\/span><\/em>) may be assigned to a different partition.<\/p>\n<p>After publishing these messages, Kafdrop immediately reflects the updated state of the topic. The dashboard shows that the topic still contains <span style=\"color: #993300;\"><em><strong>3 partitions<\/strong><\/em><\/span>, all preferred replicas remain in a healthy state (<em><span style=\"color: #993300;\"><strong>100%<\/strong><\/span><\/em>), there are <em><span style=\"color: #993300;\"><strong>0 under-replicated partitions<\/strong><\/span><\/em>, and the <em><span style=\"color: #993300;\"><strong>Total Available Messages<\/strong><\/span><\/em> count has increased to <em><span style=\"color: #993300;\"><strong>3<\/strong><\/span><\/em>.<\/p>\n<p>At a glance, we can confirm that the Kafka cluster is healthy, replication is functioning correctly and the messages have been successfully written to the topic.<\/p>\n<div id=\"attachment_80340\" style=\"width: 635px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-80340\" decoding=\"async\" loading=\"lazy\" class=\"size-large wp-image-80340\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-29-at-12.04.14\u202fAM-1024x520.png\" alt=\"Topic Overview | Kafdrop 1\" width=\"625\" height=\"317\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-29-at-12.04.14\u202fAM-1024x520.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-29-at-12.04.14\u202fAM-300x152.png 300w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-29-at-12.04.14\u202fAM-768x390.png 768w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-29-at-12.04.14\u202fAM-1536x780.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-29-at-12.04.14\u202fAM-2048x1039.png 2048w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-29-at-12.04.14\u202fAM-624x317.png 624w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><p id=\"caption-attachment-80340\" class=\"wp-caption-text\">Published Messages Overview | Kafdrop<\/p><\/div>\n<p>&nbsp;<\/p>\n<hr \/>\n<h1><\/h1>\n<h1>Understanding Partition Details<\/h1>\n<p>&nbsp;<\/p>\n<div id=\"attachment_80341\" style=\"width: 635px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-80341\" decoding=\"async\" loading=\"lazy\" class=\"size-large wp-image-80341\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.58.14\u202fPM-1-1024x698.png\" alt=\"Partition Details View | Kafdrop\" width=\"625\" height=\"426\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.58.14\u202fPM-1-1024x698.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.58.14\u202fPM-1-300x204.png 300w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.58.14\u202fPM-1-768x523.png 768w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.58.14\u202fPM-1-1536x1047.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.58.14\u202fPM-1-2048x1396.png 2048w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-7.58.14\u202fPM-1-624x425.png 624w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><p id=\"caption-attachment-80341\" class=\"wp-caption-text\">Partition Details View | Kafdrop<\/p><\/div>\n<p>The <em><strong><span style=\"color: #993300;\">Partition Details<\/span><\/strong><\/em> section is one of the most valuable views in Kafdrop because it provides insight into how Kafka has distributed messages across the partitions of a topic. Rather than simply showing that messages exist, it allows you to understand where those messages have been stored and how the topic is being utilised.<\/p>\n<p>For the <em><strong><span style=\"color: #993300;\">getting-started<\/span><\/strong><\/em> topic, the partition information is shown below:<\/p>\n<table style=\"border-collapse: collapse; width: 22.9979%; height: 120px;\">\n<tbody>\n<tr style=\"height: 24px;\">\n<td style=\"width: 3.74685%; height: 24px;\"><strong>Partition<\/strong><\/td>\n<td style=\"width: 8.70049%; height: 24px;\"><strong> Last Offset<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 3.74685%; height: 24px;\"><\/td>\n<td style=\"width: 8.70049%; height: 24px;\"><\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 3.74685%; height: 24px;\">0<\/td>\n<td style=\"width: 8.70049%; height: 24px;\">0<\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 3.74685%; height: 24px;\">1<\/td>\n<td style=\"width: 8.70049%; height: 24px;\">2<\/td>\n<\/tr>\n<tr style=\"height: 24px;\">\n<td style=\"width: 3.74685%; height: 24px;\">2<\/td>\n<td style=\"width: 8.70049%; height: 24px;\">1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>From the values shown above, we can immediately see that Kafka has not distributed the messages evenly across all three partitions. Instead, messages have been assigned according to Kafka&#8217;s partitioning strategy.<\/p>\n<p>By inspecting the partition details in Kafdrop, you can quickly verify whether messages are being distributed as expected, identify potential partition skew and confirm that key-based partitioning is working correctly.<\/p>\n<hr \/>\n<h1><\/h1>\n<h1>Understanding Kafka Partition Assignment<\/h1>\n<p>One of Kafka&#8217;s most important features is its ability to consistently route messages with the same key to the same partition. This ensures that messages belonging to the same logical entity are processed in the order they were produced.<\/p>\n<p>This behaviour is critical for:<\/p>\n<ul>\n<li>Order Processing<\/li>\n<li>Payment Events<\/li>\n<li>Inventory Updates<\/li>\n<li>User Activity Streams<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>In our example, the <em><strong><span style=\"color: #993300;\">getting-started<\/span><\/strong><\/em> topic contains three partitions. When the producer publishes messages with the <em><span style=\"color: #993300;\"><strong>key a<\/strong><\/span><\/em>, Kafka computes the same hash value each time, resulting in both messages being assigned to <em><strong><span style=\"color: #993300;\">Partition 1<\/span><\/strong><\/em>. Similarly, the message with key b is hashed to a different value and is therefore routed to <em><strong><span style=\"color: #993300;\">Partition 2.<\/span><\/strong><\/em><\/p>\n<p>As a result, the messages are distributed as follows:<\/p>\n<blockquote><p><strong><em><span style=\"color: #993300;\">Partition 1<\/span><\/em><\/strong><\/p>\n<p><strong><em><span style=\"color: #993300;\">Key: a Value: first message<\/span><\/em><\/strong><br \/>\n<strong><em><span style=\"color: #993300;\">Key: a Value: second message<\/span><\/em><\/strong><\/p>\n<p><strong><em><span style=\"color: #993300;\">Partition 2<\/span><\/em><\/strong><\/p>\n<p><strong><em><span style=\"color: #993300;\">Key: b Value: first message<\/span><\/em><\/strong><\/p><\/blockquote>\n<hr \/>\n<h1><\/h1>\n<h1>Viewing Messages in Kafdrop<\/h1>\n<p>One of Kafdrop&#8217;s most powerful features is direct message inspection.<\/p>\n<p>Click: <span style=\"color: #993300;\">View Messages<\/span><\/p>\n<p>to browse messages stored in Kafka.<\/p>\n<div id=\"attachment_80175\" style=\"width: 635px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-80175\" decoding=\"async\" loading=\"lazy\" class=\"size-large wp-image-80175\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-8.02.00\u202fPM-1024x500.png\" alt=\"View Messages | Kafdrop\" width=\"625\" height=\"305\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-8.02.00\u202fPM-1024x500.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-8.02.00\u202fPM-300x147.png 300w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-8.02.00\u202fPM-768x375.png 768w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-8.02.00\u202fPM-1536x750.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-8.02.00\u202fPM-2048x1000.png 2048w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-8.02.00\u202fPM-624x305.png 624w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><p id=\"caption-attachment-80175\" class=\"wp-caption-text\">View Messages | Kafdrop<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>Kafdrop displays:<\/p>\n<blockquote>\n<ul>\n<li>Partition<\/li>\n<li>Offset<\/li>\n<li>Key<\/li>\n<li>Timestamp<\/li>\n<li>Headers<\/li>\n<li>Payload<\/li>\n<\/ul>\n<\/blockquote>\n<hr \/>\n<h1><\/h1>\n<h1>Monitoring Consumer Groups<\/h1>\n<p>The Consumers section displays:<\/p>\n<blockquote>\n<ul>\n<li>Consumer Group ID<\/li>\n<li>Combined Lag<\/li>\n<\/ul>\n<\/blockquote>\n<p><em><strong><span style=\"color: #993300;\">Currently No active consumers.<\/span><\/strong><\/em><\/p>\n<p>Once consumers begin processing messages, Kafdrop will show consumer lag information.<\/p>\n<p><strong>Example:<\/strong><\/p>\n<table style=\"border-collapse: collapse; width: 37.3084%;\">\n<tbody>\n<tr>\n<td style=\"width: 18.222%;\"><strong> Consumer Group<\/strong><\/td>\n<td style=\"width: 7.97132%;\"><strong>Lag<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 18.222%;\">order-consumer-group<\/td>\n<td style=\"width: 7.97132%;\">0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>This is extremely useful for identifying slow consumers and processing bottlenecks.<\/p>\n<hr \/>\n<h1><\/h1>\n<h1>Creating Topics Using Kafdrop<\/h1>\n<p>Kafdrop provides basic topic administration capabilities.<\/p>\n<p>From the dashboard, click:<\/p>\n<p>+ New<\/p>\n<div id=\"attachment_80176\" style=\"width: 635px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-80176\" decoding=\"async\" loading=\"lazy\" class=\"size-large wp-image-80176\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-9.53.42\u202fPM-1024x178.png\" alt=\"Add new topic | Kafdrop\" width=\"625\" height=\"109\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-9.53.42\u202fPM-1024x178.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-9.53.42\u202fPM-300x52.png 300w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-9.53.42\u202fPM-768x133.png 768w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-9.53.42\u202fPM-1536x267.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-9.53.42\u202fPM-2048x356.png 2048w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-9.53.42\u202fPM-624x108.png 624w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><p id=\"caption-attachment-80176\" class=\"wp-caption-text\">Add new topic | Kafdrop<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>You can specify:<\/p>\n<blockquote>\n<ul>\n<li>Topic Name<\/li>\n<li>Partitions<\/li>\n<li>Replication Factor<\/li>\n<\/ul>\n<\/blockquote>\n<p>This eliminates the need for Kafka CLI commands during development.<\/p>\n<hr \/>\n<h1><\/h1>\n<h1>Deleting Topics Using Kafdrop<\/h1>\n<p>When viewing a topic, Kafdrop displays a Delete topic button:<\/p>\n<div id=\"attachment_80177\" style=\"width: 635px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-80177\" decoding=\"async\" loading=\"lazy\" class=\"size-large wp-image-80177\" src=\"https:\/\/www.tothenew.com\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-9.55.52\u202fPM-1024x228.png\" alt=\"Delete topic | Kafdrop\" width=\"625\" height=\"139\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-9.55.52\u202fPM-1024x228.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-9.55.52\u202fPM-300x67.png 300w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-9.55.52\u202fPM-768x171.png 768w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-9.55.52\u202fPM-1536x342.png 1536w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-9.55.52\u202fPM-2048x456.png 2048w, \/blog\/wp-ttn-blog\/uploads\/2026\/06\/Screenshot-2026-06-20-at-9.55.52\u202fPM-624x139.png 624w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><p id=\"caption-attachment-80177\" class=\"wp-caption-text\">Delete topic | Kafdrop<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>This allows administrators to remove topics directly from the UI.<\/p>\n<p><span style=\"text-decoration: underline;\"><span style=\"color: #993300; text-decoration: underline;\"><strong>Important Note<\/strong><\/span><\/span><\/p>\n<p>Deleting a topic removes:<\/p>\n<blockquote>\n<ul>\n<li>Messages<\/li>\n<li>Offsets<\/li>\n<li>Metadata<\/li>\n<\/ul>\n<\/blockquote>\n<p><strong>For production environments, topic deletion should be tightly controlled.<\/strong><\/p>\n<hr \/>\n<h1><\/h1>\n<h1>Real-World Troubleshooting Scenarios<\/h1>\n<h3>1. Messages Not Being Consumed<\/h3>\n<p>Symptoms:<\/p>\n<blockquote>\n<ul>\n<li>Producer is publishing events<\/li>\n<li>Consumer appears healthy<\/li>\n<\/ul>\n<\/blockquote>\n<p>Investigation:<\/p>\n<blockquote>\n<ol>\n<li>Open Consumer Groups<\/li>\n<li>Check Lag<\/li>\n<\/ol>\n<\/blockquote>\n<p><strong>Result<\/strong>:<\/p>\n<p>Lag = 10000<\/p>\n<p>This immediately identifies a consumer bottleneck.<\/p>\n<p>&nbsp;<\/p>\n<h3>2. Missing Events<\/h3>\n<p>Investigation:<\/p>\n<ol>\n<li>Open Topic<\/li>\n<li>View Messages<\/li>\n<\/ol>\n<p>If the event does not exist in Kafka, the issue likely lies with the producer.<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<h1>Using Kafdrop in Production<\/h1>\n<p>Kafdrop can also be a valuable operational tool in a production environment.<\/p>\n<p>In production systems, Kafdrop provides a centralized interface for developers, support teams, platform engineers, and SREs to quickly inspect Kafka topics, verify message delivery, analyze consumer lag, and troubleshoot issues without accessing Kafka servers directly.<\/p>\n<p>However, production deployments require additional planning around security, scalability, and access control.<\/p>\n<p>During production incidents, support team\/dev engineers often need answers such as:<\/p>\n<ul>\n<li>Did Kafka receive the message?<\/li>\n<li>Which partition contains the event?<\/li>\n<li>Was the event produced successfully?<\/li>\n<li>Is the consumer lagging?<\/li>\n<li>Are replicas healthy?<\/li>\n<\/ul>\n<p>Kafdrop provides these answers through a single interface.<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<h1><\/h1>\n<h1>Conclusion<\/h1>\n<p>Kafdrop is one of the simplest and most effective tools for Kafka monitoring and troubleshooting.<\/p>\n<p>Using a local Kafka setup, we were able to:<\/p>\n<blockquote>\n<ul>\n<li>Monitor cluster health<\/li>\n<li>Inspect topics and partitions<\/li>\n<li>View messages<\/li>\n<li>Understand partition assignment<\/li>\n<li>Verify message ordering<\/li>\n<li>Monitor consumers<\/li>\n<li>Create topics<\/li>\n<li>Delete topics<\/li>\n<\/ul>\n<\/blockquote>\n<p>Whether you&#8217;re learning Kafka, debugging a micro service or operating a production cluster, Kafdrop provides valuable visibility into what is happening inside Kafka without requiring command-line tools or custom consumers.<\/p>\n<p>If your team works with Kafka regularly, Kafdrop deserves a place in your Kafka observability toolkit.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Apache Kafka has become the backbone of modern event-driven architectures, powering everything from micro services communication to real-time analytics and stream processing. As Kafka deployments grow, developers and operators frequently need answers to questions such as: Are messages reaching Kafka successfully? Which partition received a message? Are consumers keeping up with producers? How much [&hellip;]<\/p>\n","protected":false},"author":2292,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":11},"categories":[446],"tags":[248,1404,1892,3836,5262,1604,1499],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/80238"}],"collection":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/users\/2292"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/comments?post=80238"}],"version-history":[{"count":22,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/80238\/revisions"}],"predecessor-version":[{"id":80384,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/80238\/revisions\/80384"}],"wp:attachment":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/media?parent=80238"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/categories?post=80238"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/tags?post=80238"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}