

{"id":15178,"date":"2018-05-25T06:05:48","date_gmt":"2018-05-25T06:05:48","guid":{"rendered":"https:\/\/data-flair.training\/blogs\/?p=15178"},"modified":"2018-05-25T06:05:48","modified_gmt":"2018-05-25T06:05:48","slug":"kafka-monitoring","status":"publish","type":"post","link":"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/","title":{"rendered":"Kafka Monitoring | Methods &amp; Tools for Kafka Monitoring"},"content":{"rendered":"<p><span style=\"font-weight: 400\">In our last <strong>Kafka Tutorial<\/strong>, we discussed <strong>Kafka Tools<\/strong>. Today, we will see Kafka Monitoring. In this, we will learn the concept of how to Monitor Apache Kafka. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Moreover, we will cover all possible\/reasonable Kafka metrics that can help at the time of troubleshooting or Kafka Monitoring. Also, we will discuss audit and Kafka Monitoring tools such as Kafka Monitoring JMX.<\/span><\/p>\n<p>So, let&#8217;s begin with Monitoring in Apache Kafka.<\/p>\n<h2><span style=\"font-weight: 400\">What is Kafka Monitoring?<\/span><\/h2>\n<p><span style=\"font-weight: 400\">As we know <strong>Kafka&#8217;s cluster<\/strong>-centric design offers strong durability and fault-tolerance. Also, topics are partitioned and replicated across multiple nodes, since Kafka is a distributed system. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Moreover, Kafka can be a highly attractive option for data integration, with meaningful performance monitoring and prompt alerting of issues. Basically, when there are troubleshooting Kafka issues application manager collects all performance metrics and alerts to those that require corrective action. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Let&#8217;s discuss Kafka Monitoring in detail &#8211;<\/span><\/p>\n<div id=\"attachment_16672\" style=\"width: 1210px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-Monitoring-01.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-16672\" class=\"wp-image-16672 size-full\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-Monitoring-01.jpg\" alt=\"Introduction to Kafka Monitoring\" width=\"1200\" height=\"628\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-Monitoring-01.jpg 1200w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-Monitoring-01-150x79.jpg 150w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-Monitoring-01-300x157.jpg 300w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-Monitoring-01-768x402.jpg 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-Monitoring-01-1024x536.jpg 1024w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><p id=\"caption-attachment-16672\" class=\"wp-caption-text\">Introduction to Kafka Monitoring<\/p><\/div>\n<h3>a.\u00a0Track System Resource Utilization<\/h3>\n<p><span style=\"font-weight: 400\">To ensure you don&#8217;t run out of resources \u201cTrack System Resource Utilization\u201d automatically discover Kafka servers, and also track the resource utilization details like memory, CPU and disk growth over time. <\/span><\/p>\n<p><span style=\"font-weight: 400\">However, we ensure that your Apache Kafka server is up and continuously operating as expected. Hence, whenever there are sudden surges in resource consumption or unusual patterns, you can get notified quickly.<\/span><\/p>\n<h3>b.\u00a0Keep Tabs on Threads and JVM usage<\/h3>\n<p><span style=\"font-weight: 400\">Kafka relies on <strong>Java garbage collection<\/strong> processes to free up memory, as it runs in the<strong> Java Virtual Machine (JVM)<\/strong>. The more often the garbage collection will run, the more activity in your Kafka cluster occurs. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Make sure that started threads don\u2019t overload the server&#8217;s memory, also ensure to track JVM heap sizes. Moreover, to prevent performance bottlenecks in your system, track thread usage with metrics like Daemon, Peak, and Live Thread Count.<\/span><\/p>\n<h3>c.\u00a0Understand Broker, Controller and Replication Statistics<\/h3>\n<p><span style=\"font-weight: 400\">In a Kafka cluster, for managing the states of partitions and replicas and for performing administrative tasks like reassigning partitions, one of the brokers serves as the controller, that controller is responsible. <\/span><\/p>\n<p><span style=\"font-weight: 400\">In order to see which <strong>Kafka broker<\/strong> was the controller when an issue occurred, monitor active controllers and to prevent service interruptions, offline partitions count. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Also, it monitors the broker&#8217;s Log flush latency &#8211; However, the longer it takes to flush log to disk, the more the pipeline breaks up. In addition, to know if replication is going as fast as configured, it tracks under-replicated partitions.<\/span><\/p>\n<h3>d.\u00a0Monitor Network and Topic Details<\/h3>\n<p><span style=\"font-weight: 400\">Get the full picture of network usage on your host, track network throughput or aggregate incoming and outgoing byte rate on your broker topics for more information as to where potential bottlenecks lie. Make informed decisions.<\/span><\/p>\n<h3>e.\u00a0Fix performance problems faster<\/h3>\n<p><span style=\"font-weight: 400\">If there are performance issues with the components of Apache Kafka, get instant notifications. Also, find out which application is causing the excessive load, and become aware of performance bottlenecks. Before your end users experience issues, take quick remedial actions.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Metrics and Alerts in Kafka Monitoring\u00a0<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Basically, our general rule of thumb is \u201ccollect all possible\/reasonable metrics that can help when troubleshooting, alert only to those that require an action from you\u201d.<\/span><\/p>\n<p><strong>a. Metrics on which we do graph and alerting<\/strong><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Message in rate<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">A byte in rate from clients<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">A byte in rate from other brokers<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME:kafka.server:type=BrokerTopicMetrics,name=ReplicationBytesInPerSec<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Request rate<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEANNAME: kafka.network:type=RequestMetrics,name=RequestsPerSec,request={Produce|FetchConsumer|FetchFollower}<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Error rate<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.network:type=RequestMetrics,name=ErrorsPerSec,request=([-.\\w]+),error=([-.\\w]+)<\/pre>\n<p><span style=\"font-weight: 400\">NORMAL VALUE: Number of errors in responses counted per-request-type, per-error-code. If a response contains multiple errors, all are counted. error=NONE indicates successful responses.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Request size in bytes<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.network:type=RequestMetrics,name=RequestBytes,request=([-.\\w]+)<\/pre>\n<p><span style=\"font-weight: 400\">NORMAL VALUE: Size of requests for each request type.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Temporary memory size in bytes<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.network:type=RequestMetrics,name=TemporaryMemoryBytes,request={Produce|Fetch}<\/pre>\n<p>NORMAL VALUE: Temporary memory used for message format conversions and decompression.<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Message conversion time<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.network:type=RequestMetrics,name=MessageConversionsTimeMs,request={Produce|Fetch}<\/pre>\n<p>NORMAL VALUE: Time in milliseconds spent on message format conversions.<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Message conversion rate<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=BrokerTopicMetrics,name={Produce|Fetch}MessageConversionsPerSec,topic=([-.\\w]+)<\/pre>\n<p>NORMAL VALUE: Number of records which required message format conversion.<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Byte out rate to clients<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Byte out rate to other brokers<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=BrokerTopicMetrics,name=ReplicationBytesOutPerSec<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Log flush rate and time<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.log:type=LogFlushStats,name=LogFlushRateAndTimeMs<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\"># of under replicated partitions (|ISR| &lt; |all replicas|)<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions<\/pre>\n<p>NORMAL VALUE: 0<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\"># of under minIsr partitions (|ISR| &lt; min.insync.replicas)<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=ReplicaManager,name=UnderMinIsrPartitionCount<\/pre>\n<p>NORMAL VALUE: 0<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\"># of offline log directories<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.log:type=LogManager,name=OfflineLogDirectoryCount<\/pre>\n<p>NORMAL VALUE: 0<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Is controller active on broker<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.controller:type=KafkaController,name=ActiveControllerCount<\/pre>\n<p>NORMAL VALUE: only one broker in the cluster should have 1<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Leader election rate<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.controller:type=ControllerStats,name=LeaderElectionRateAndTimeMs<\/pre>\n<p>NORMAL VALUE: non-zero when there are broker failures<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Unclean leader election rate<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME:kafka.controller:type=ControllerStats,name=UncleanLeaderElectionsPerSec<\/pre>\n<p>NORMAL VALUE:0<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Partition counts<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=ReplicaManager,name=PartitionCount<\/pre>\n<p>NORMAL VALUE: mostly even across brokers<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Leader replica counts<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=ReplicaManager,name=LeaderCount<\/pre>\n<p>NORMAL VALUE: mostly even across brokers<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">ISR shrink rate<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=ReplicaManager,name=IsrShrinksPerSec<\/pre>\n<p>NORMAL VALUE: If a broker goes down, ISR for some of the partitions will shrink. When that broker is up again, ISR will be expanded once the replicas are fully caught up. Other than that, the expected value for both ISR shrink rate and expansion rate is 0.<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">ISR expansion rate<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=ReplicaManager,name=IsrExpandsPerSec<\/pre>\n<p>NORMAL VALUE:<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Max lag in messages btw follower and leader replicas<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=ReplicaFetcherManager,name=MaxLag,clientId=Replica<\/pre>\n<p>NORMAL VALUE: lag should be proportional to the maximum batch size of a produce request<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Lag in messages per follower replica<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=FetcherLagMetrics,name=ConsumerLag,clientId=([-.\\w]+),topic=([-.\\w]+),partition=([0-9]+)<\/pre>\n<p>NORMAL VALUE: lag should be proportional to the maximum batch size of a produce request.<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Requests waiting in the producer purgatory<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=DelayedOperationPurgatory,name=PurgatorySize,delayedOperation=Produce<\/pre>\n<p>NORMAL VALUE: non-zero if ack=-1 is used<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Requests waiting in the fetch purgatory<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=DelayedOperationPurgatory,name=PurgatorySize,delayedOperation=Fetch<\/pre>\n<p>NORMAL VALUE: size depends on fetch.wait.max.ms in the consumer<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Request total timeSee also &#8211;<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.network:type=RequestMetrics,name=TotalTimeMs,request={Produce|FetchConsumer|FetchFollower}<\/pre>\n<p>NORMAL VALUE: broken into a queue, local, remote and response send time<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Time the request waits in the request queue<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME:kafka.network:type=RequestMetrics,name=RequestQueueTimeMs,request={Produce|FetchConsumer|FetchFollower}<\/pre>\n<p>NORMAL VALUE:<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Time the request is processed at the leader<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.network:type=RequestMetrics,name=LocalTimeMs,request={Produce|FetchConsumer|FetchFollower}<\/pre>\n<p>NORMAL VALUE:<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Time the request waits for the follower<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.network:type=RequestMetrics,name=RemoteTimeMs,request={Produce|FetchConsumer|FetchFollower}<\/pre>\n<p>NORMAL VALUE: non-zero for produce requests when ack=-1<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Time the request waits in the response queue<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.network:type=RequestMetrics,name=ResponseQueueTimeMs,request={Produce|FetchConsumer|FetchFollower}<\/pre>\n<p>NORMAL VALUE:<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Time to send the response<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.network:type=RequestMetrics,name=ResponseSendTimeMs,request={Produce|FetchConsumer|FetchFollower}<\/pre>\n<p>NORMAL VALUE:<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">A number of messages the consumer lags behind the producer. Published by the consumer, not broker.<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: Old consumer:\nkafka.consumer:type=ConsumerFetcherManager,name=MaxLag,clientId=([-.\\w]+)<\/pre>\n<p><span style=\"font-weight: 400\">New consumer: kafka.consumer:type=consumer-fetch-manager-metrics,client-id={client-id} Attribute: records-lag-max<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">The average fraction of time the network processors are idle<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.network:type=SocketServer,name=NetworkProcessorAvgIdlePercent<\/pre>\n<p>NORMAL VALUE: between 0 and 1, ideally &gt; 0.3<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">The average fraction of time the request handler threads are idle<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=KafkaRequestHandlerPool,name=RequestHandlerAvgIdlePercent<\/pre>\n<p>NORMAL VALUE: between 0 and 1, ideally &gt; 0.3<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Bandwidth quota metrics per (user, client-id), user or client-id<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type={Produce|Fetch},user=([-.\\w]+),client-id=([-.\\w]+)<\/pre>\n<p>NORMAL VALUE: Two attributes. throttle-time indicates the amount of time in ms the client was throttled. Ideally = 0. byte-rate indicates the data produce\/consume rate of the client in bytes\/sec.<\/p>\n<p>For (user, client-id) quotas, both user and client-id are specified. If per-client-id quota is applied to the client, a user is not specified. If per-user quota is applied, client-id is not specified.<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Request quota metrics per (user, client-id), user or client-id<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=Request,user=([-.\\w]+),client-id=([-.\\w]+)<\/pre>\n<p>NORMAL VALUE: Two attributes. throttle-time indicates the amount of time in ms the client was throttled. Ideally = 0. request-time indicates the percentage of time spent in broker network and I\/O threads to process requests from client group.<\/p>\n<p>For (user, client-id) quotas, both user and client-id are specified. If the per-client-id quota is applied to the client, the user is not specified. If the per-user quota is applied, client-id is not specified.<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Requests exempt from throttling<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=Request<\/pre>\n<p>NORMAL VALUE: exempt-throttle-time indicates the percentage of time spent in broker network and I\/O threads to process requests that are exempt from throttling.<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">ZooKeeper client request latency<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=ZooKeeperClientMetrics,name=ZooKeeperRequestLatencyMs<\/pre>\n<p>NORMAL VALUE: Latency in milliseconds for ZooKeeper requests from the broker.<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">ZooKeeper connection status<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.server:type=SessionExpireListener,name=SessionState<\/pre>\n<p>NORMAL VALUE: Connection status of broker&#8217;s ZooKeeper session which may be one of Disconnected|SyncConnected|AuthFailed|ConnectedReadOnly|SaslAuthenticated|Expired.<\/p>\n<p><strong>b. Common monitoring metrics for producer\/consumer\/connect\/streams<\/strong><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">connection-close-rate<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: \u00a0Connections closed per second in the window.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME:  kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">connection-creation-rate<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: \u00a0New connections established per second in the window.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME:  kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">network-io-rate<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The average number of network operations (reads or writes) on all connections per second.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">outgoing-byte-rate<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The average number of outgoing bytes sent per second to all servers.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">request-rate<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The average number of requests sent per second.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">request-size-avg<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: \u00a0The average size of all requests in the window.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">request-size-max<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The maximum size of any request sent in the window.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">incoming-byte-rate<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: Bytes\/second read off all sockets.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">response-rate<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: Responses received sent per second.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">select-rate<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: Number of times the I\/O layer checked for new I\/O to perform per second.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">io-wait-time-ns-avg<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The average length of time the I\/O thread spent waiting for a socket ready for reads or writes in nanoseconds.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">io-wait-ratio<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The fraction of time the I\/O thread spent waiting.<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">io-time-ns-avg<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The average length of time for I\/O per select call in nanoseconds.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">io-ratio<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The fraction of time the I\/O thread spent doing I\/O.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">connection-count<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The current number of active connections.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">successful-authentication-rate<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: Connections that were successfully authenticated using SASL or SSL.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">failed-authentication-rate<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: Connections that failed authentication.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\\w]+)<\/pre>\n<p><strong>c. Common Per-broker metrics for producer\/consumer\/connect\/streams<\/strong><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">outgoing-byte-rate<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The average number of outgoing bytes sent per second for a node.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.producer:type=[consumer|producer|connect]-node-metrics,client-id=([-.\\w]+),node-id=([0-9]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">request-rate<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The average number of requests sent per second for a node.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.producer:type=[consumer|producer|connect]-node-metrics,client-id=([-.\\w]+),node-id=([0-9]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">request-size-avg<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The average size of all requests in the window for a node.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.producer:type=[consumer|producer|connect]-node-metrics,client-id=([-.\\w]+),node-id=([0-9]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">request-size-max<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The maximum size of any request sent in the window for a node.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.producer:type=[consumer|producer|connect]-node-metrics,client-id=([-.\\w]+),node-id=([0-9]+)\nkafka.producer:type=[consumer|producer|connect]-node-metrics,client-id=([-.\\w]+),node-id=([0-9]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">incoming-byte-rate<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The average number of responses received per second for a node.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.producer:type=[consumer|producer|connect]-node-metrics,client-id=([-.\\w]+),node-id=([0-9]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">request-latency-avg<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The average request latency in ms for a node.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.producer:type=[consumer|producer|connect]-node-metrics,client-id=([-.\\w]+),node-id=([0-9]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">request-latency-max<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: The maximum request latency in ms for a node.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.producer:type=[consumer|producer|connect]-node-metrics,client-id=([-.\\w]+),node-id=([0-9]+)<\/pre>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">response-rate<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">DESCRIPTION: Responses received sent per second for a node.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">MBEAN NAME: kafka.producer:type=[consumer|producer|connect]-node-metrics,client-id=([-.\\w]+),node-id=([0-9]+)<\/pre>\n<h3>Others &#8211; Kafka Monitoring<\/h3>\n<p><span style=\"font-weight: 400\">Also, it is highly recommended to monitor GC time and other stats and various server stats like CPU utilization, I\/O service time, etc. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Also, it is recommended to monitor the message\/byte rate (global and per topic), request rate\/size\/time, and on the consumer side, max lag in messages among all partitions and min fetch request rate, on the client side.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Audit in Kafka Monitoring<\/span><\/h2>\n<p><span style=\"font-weight: 400\">However, the final alerting is correctness of the data delivery. An audit that every message that is sent is consumed by all consumers and measure the lag for this to occur. Moreover, for important topics alert if a certain completeness is not achieved in a certain time period.<\/span><\/p>\n<h2>Kafka Monitoring Tools<\/h2>\n<p><span style=\"font-weight: 400\">Basically, monitoring tools with JMX support should be able to monitor a Kafka cluster. Some of them are:<\/span><\/p>\n<div id=\"attachment_15477\" style=\"width: 1210px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-Monitoring-Tools-01.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-15477\" class=\"wp-image-15477 size-full\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-Monitoring-Tools-01.jpg\" alt=\"Kafka Monitoring- Kafka Monitoring Tools\" width=\"1200\" height=\"628\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-Monitoring-Tools-01.jpg 1200w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-Monitoring-Tools-01-150x79.jpg 150w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-Monitoring-Tools-01-300x157.jpg 300w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-Monitoring-Tools-01-768x402.jpg 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Kafka-Monitoring-Tools-01-1024x536.jpg 1024w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><p id=\"caption-attachment-15477\" class=\"wp-caption-text\">Kafka Monitoring Tools<\/p><\/div>\n<h3>a.\u00a0check_kafka.pl<\/h3>\n<p><span style=\"font-weight: 400\">This Kafka Monitoring tool performs a complete end to end test, i.e. it inserts a message in Kafka as a producer and then extracts it as a consumer. Hence, we can say, while measuring service times, this makes our life easier.<\/span><\/p>\n<h3>b.\u00a0KafkaOffsetMonitor<\/h3>\n<p><span style=\"font-weight: 400\">This Apache Kafka Monitoring tool helps to monitor Kafka consumers and their position (offset) in the queue. It boosts our understanding of how our queue grows and also tells which consumers groups are lagging behind.\u00a0<\/span><\/p>\n<h3>c.\u00a0Burrow<\/h3>\n<p><span style=\"font-weight: 400\">The smartest tool out there IS Burrow, it has developed by the LinkedIn folks. This tool analyzes consumer offsets and lags over a window of time and determines the consumer status. So, we can retrieve this status over an HTTP endpoint and then plug it into our favourite monitoring tool.<\/span><\/p>\n<h3>d.\u00a0Yahoo\u2019s Kafka-Manager<\/h3>\n<p><span style=\"font-weight: 400\">However, it performs some basic monitoring, it is more of a management tool.<\/span><br \/>\nSo, this was all about Apache Kafka Monitoring. Hope you like our explanation.<\/p>\n<h2><span style=\"font-weight: 400\">Conclusion &#8211; Apache Kafka Monitoring<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Hence, we have seen the concept of how to Monitor\u00a0Apache Kafka in detail. Along with this, we discussed different Kafka Monitoring tools. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Moreover, we studied Kafka Metrics and alerts. In addition, we saw Audit Kafka Monitoring. Still, if any doubt occurs regarding Kafka Monitoring, feel free to ask in the comment section.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In our last Kafka Tutorial, we discussed Kafka Tools. Today, we will see Kafka Monitoring. In this, we will learn the concept of how to Monitor Apache Kafka. Moreover, we will cover all possible\/reasonable&#46;&#46;&#46;<\/p>\n","protected":false},"author":5,"featured_media":15476,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[1235,6287,7845,7902,7903,7904,7905,8864,14771],"class_list":["post-15178","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kafka","tag-audit-kafka-monitoring","tag-how-to-monitor-in-kafka","tag-kafka-alerts","tag-kafka-metrics","tag-kafka-monitoring","tag-kafka-monitoring-jmx","tag-kafka-monitoring-tools","tag-monitoring-in-kafka","tag-tools-in-kafka-monitoring"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kafka Monitoring | Methods &amp; Tools for Kafka Monitoring - DataFlair<\/title>\n<meta name=\"description\" content=\"Apache Kafka Monitoring, how to monitor in Kafka, Kafka monitoring Tools, Kafka Metrics, Kafka Alerts, Kafka monitoring Audits,\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kafka Monitoring | Methods &amp; Tools for Kafka Monitoring - DataFlair\" \/>\n<meta property=\"og:description\" content=\"Apache Kafka Monitoring, how to monitor in Kafka, Kafka monitoring Tools, Kafka Metrics, Kafka Alerts, Kafka monitoring Audits,\" \/>\n<meta property=\"og:url\" content=\"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/\" \/>\n<meta property=\"og:site_name\" content=\"DataFlair\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DataFlairWS\/\" \/>\n<meta property=\"article:published_time\" content=\"2018-05-25T06:05:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Apache-Kafka-Monitoring-01.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"DataFlair Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:site\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DataFlair Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kafka Monitoring | Methods &amp; Tools for Kafka Monitoring - DataFlair","description":"Apache Kafka Monitoring, how to monitor in Kafka, Kafka monitoring Tools, Kafka Metrics, Kafka Alerts, Kafka monitoring Audits,","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/","og_locale":"en_US","og_type":"article","og_title":"Kafka Monitoring | Methods &amp; Tools for Kafka Monitoring - DataFlair","og_description":"Apache Kafka Monitoring, how to monitor in Kafka, Kafka monitoring Tools, Kafka Metrics, Kafka Alerts, Kafka monitoring Audits,","og_url":"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/","og_site_name":"DataFlair","article_publisher":"https:\/\/www.facebook.com\/DataFlairWS\/","article_published_time":"2018-05-25T06:05:48+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Apache-Kafka-Monitoring-01.jpg","type":"image\/jpeg"}],"author":"DataFlair Team","twitter_card":"summary_large_image","twitter_creator":"@DataFlairWS","twitter_site":"@DataFlairWS","twitter_misc":{"Written by":"DataFlair Team","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/#article","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/"},"author":{"name":"DataFlair Team","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/7f83c342f5d1632d6f7b4b0b0f447823"},"headline":"Kafka Monitoring | Methods &amp; Tools for Kafka Monitoring","datePublished":"2018-05-25T06:05:48+00:00","mainEntityOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/"},"wordCount":1922,"commentCount":0,"publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Apache-Kafka-Monitoring-01.jpg","keywords":["audit kafka monitoring","how to monitor in kafka","Kafka Alerts","Kafka Metrics","Kafka monitoring","Kafka Monitoring JMX","Kafka Monitoring Tools","monitoring in Kafka","tools in Kafka Monitoring"],"articleSection":["Apache Kafka Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/data-flair.training\/blogs\/kafka-monitoring\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/","url":"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/","name":"Kafka Monitoring | Methods &amp; Tools for Kafka Monitoring - DataFlair","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/#primaryimage"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Apache-Kafka-Monitoring-01.jpg","datePublished":"2018-05-25T06:05:48+00:00","description":"Apache Kafka Monitoring, how to monitor in Kafka, Kafka monitoring Tools, Kafka Metrics, Kafka Alerts, Kafka monitoring Audits,","breadcrumb":{"@id":"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/data-flair.training\/blogs\/kafka-monitoring\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/#primaryimage","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Apache-Kafka-Monitoring-01.jpg","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Apache-Kafka-Monitoring-01.jpg","width":1200,"height":628,"caption":"Apache Kafka Monitoring"},{"@type":"BreadcrumbList","@id":"https:\/\/data-flair.training\/blogs\/kafka-monitoring\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog Home","item":"https:\/\/data-flair.training\/blogs\/"},{"@type":"ListItem","position":2,"name":"Apache Kafka Tutorials","item":"https:\/\/data-flair.training\/blogs\/category\/kafka\/"},{"@type":"ListItem","position":3,"name":"Kafka Monitoring | Methods &amp; Tools for Kafka Monitoring"}]},{"@type":"WebSite","@id":"https:\/\/data-flair.training\/blogs\/#website","url":"https:\/\/data-flair.training\/blogs\/","name":"DataFlair","description":"Learn Today. Lead Tomorrow.","publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/data-flair.training\/blogs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/data-flair.training\/blogs\/#organization","name":"DataFlair","url":"https:\/\/data-flair.training\/blogs\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","width":106,"height":48,"caption":"DataFlair"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DataFlairWS\/","https:\/\/x.com\/DataFlairWS","https:\/\/www.linkedin.com\/company\/dataflair-web-services-pvt-ltd\/","https:\/\/www.youtube.com\/user\/DataFlairWS"]},{"@type":"Person","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/7f83c342f5d1632d6f7b4b0b0f447823","name":"DataFlair Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4cf3a74600d131330b8c481d519afd1574093ed89f6d3396a95393ad223eb7cd?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4cf3a74600d131330b8c481d519afd1574093ed89f6d3396a95393ad223eb7cd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4cf3a74600d131330b8c481d519afd1574093ed89f6d3396a95393ad223eb7cd?s=96&d=mm&r=g","caption":"DataFlair Team"},"description":"DataFlair Team creates expert-level guides on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. Our goal is to empower learners with easy-to-understand content. Explore our resources for career growth and practical learning.","url":"https:\/\/data-flair.training\/blogs\/author\/dfteam1\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/15178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/comments?post=15178"}],"version-history":[{"count":0,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/15178\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media\/15476"}],"wp:attachment":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media?parent=15178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/categories?post=15178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/tags?post=15178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}