Introduction
Apache Kafka is a distributed event streaming platform designed for high-throughput, fault-tolerant messaging. It is widely used for building real-time data pipelines and event-driven applications. Monitoring Kafka is essential to ensure optimal performance, detect potential bottlenecks, and maintain system reliability.
To monitor Kafka efficiently, we can use the OpenTelemetry Kafka Receiver, which collects key Kafka performance metrics. These include broker health, topic throughput, partition activity, consumer lag, and more, helping to gain deep visibility into Kafka’s performance and health.
Kubernetes 2.0 ConfigMap
Users should update or append the existing ConfigMap named opsramp-workload-metric-user-config by adding application-specific fields. These fields may include authentication credentials, collection frequency, and other relevant configurations. To run OpenTelemetry Redis Receiver with Kubernetes, you need to create a ConfigMap and deploy it.
apiVersion: v1
kind: ConfigMap
metadata:
  name: opsramp-workload-metric-user-config
  namespace: opsramp-agent
data:
  workloads: |
    kafka:
      - name: kafka
        collectionInterval: 60s
        protocolVersion: "2.0.0"
        scrapers:
          - brokers
          - topics
          - consumers
        auth: none
        port: 9092
        targetPodSelector:
          matchLabels:
            - key: app.kubernetes.io/instance
              operator: ==
              value:
                - my-kafka-plain
            - key: app.kubernetes.io/name
              operator: ==
              value:
                - kafka
      - name: kafka-sasl-plaintext
        collectionInterval: 60s
        protocolVersion: "2.0.0"
        scrapers:
          - brokers
          - topics
          - consumers
        auth: sasl_plaintext
        userName:
          value: "user1"
        password:
          value: "password1"
        port: 9092
        targetPodSelector:
          matchLabels:
            - key: app.kubernetes.io/instance
              operator: ==
              value:
                - my-kafka-plain
            - key: app.kubernetes.io/name
              operator: ==
              value:
                - kafka
      - name: kafka-tls
        collectionInterval: 60s
        protocolVersion: "2.0.0"
        scrapers:
          - brokers
          - topics
          - consumers
        auth: tls
        certFile:
          source: secret
          value: default/kafka-client-tls-secret/client.pem
        keyFile:
          source: secret
          value: default/kafka-client-tls-secret/client-key.pem
        insecureSkipVerify: true
        port: 9093
        targetPodSelector:
          matchLabels:
            - key: app.kubernetes.io/instance
              operator: ==
              value:
                - my-kafka-plain
            - key: app.kubernetes.io/name
              operator: ==
              value:
                - kafkaSupported Metrics
Supported metrics for this workload as provided by the Kubernetes 2.0 Agent.
| Metric | Description | 
|---|---|
| kafka_brokers | Number of Kafka brokers in the cluster | 
| kafka_consumer_group_members | Number of members in a Kafka consumer group | 
| kafka_partition_current_offset | Current offset of a Kafka partition | 
| kafka_partition_oldest_offset | Oldest offset of a Kafka partition | 
| kafka_partition_replicas | Number of replicas for a Kafka partition | 
| kafka_partition_replicas_in_sync | Number of replicas in sync for a Kafka partition | 
| kafka_topic_partitions | Number of partitions for a Kafka topic |