卡夫卡消费者通过JMX落后

时间:2017-10-06 20:55:41

标签: apache-kafka jmx

我正在尝试监控Kafka 0.10中消费者群体的滞后情况。

我们的消费者正在跟踪他们在Kafka而非ZooKeper的抵消。这意味着我可以使用以下内容获取数据:

import React, { Component }  from 'react'
import { render } from 'react-dom'
import { Map, TileLayer, Circle, Marker, Popup, LayersControl, LayerGroup } from 'react-leaflet'

class SimpleExample extends Component {
  constructor() {
    super()
    this.state = {
      lat: 51.505,
      lng: -0.09,
      zoom: 3,
      radius: 0
    };
    this.onClick1 = this.onClick1.bind(this);
    this.onClick2 = this.onClick2.bind(this);

  }

  getRandomArbitrary(min, max) {
    return Math.random() * (max - min) + min;
  }

  onClick1(){
    this.setState({radius: this.getRandomArbitrary(100, 800)});
  }

  onClick2(){
    this.setState({radius: 0});
  }

  renderFirst() {
    var result = [];
    for(var i =0; i < 10; i++) {
     result.push(
       <Marker position={[i,i]}>
         <Popup>
           <span>A pretty CSS3 popup. <br/> Easily customizable.</span>
         </Popup>
       </Marker>
    )}
    return result;
  }

  renderSecond() {
   return <MyLayer latlng={[1, 10]} radius={this.state.radius}/>
  }

  render() {
    return (
      <div>
        <button name="btn" onClick={this.onClick1}>Click me</button>
        <button name="btn" onClick={this.onClick2}>Then me</button>

      <Map center={[0, 0]} zoom={this.state.zoom}>
        <TileLayer
          attribution='&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
          url='http://{s}.tile.osm.org/{z}/{x}/{y}.png'
        />
        <LayersControl position='topleft'>
           <LayersControl.Overlay checked name="first layer">
            {this.renderFirst()}
          </LayersControl.Overlay>
          <LayersControl.Overlay checked name="second layer">
            {this.renderSecond()}
          </LayersControl.Overlay>
        </LayersControl>


      </Map>
        </div>
    );
  }
}


class MyLayer extends Component {
  constructor(props) {
    super(props);
  }


  render() {
    if (this.props.radius === 0) {
      return <LayerGroup/>;
    }
    return (<LayerGroup>
               <Circle center={this.props.latlng} fillColor="red" radius={this.props.radius}/>
            </LayerGroup>);
  }

}


render(<SimpleExample />, document.getElementById('container')) 

这很好用。但是,我的经纪人已经使用Prometheus JMX exporter来收集大量统计数据。我已将JConsole连接到代理,但无法看到bin/kafka-consumer-groups.sh --bootstrap-server <broker> --describe --group <group-name> 报告的JMX中报告的相同数据。

在没有需要任何其他工具的情况下,是否可以使用JMX 从Kafka获取此信息?

2 个答案:

答案 0 :(得分:0)

您可以为所有分区检索指标{topic}-{partition}.records-lag的atrributes kafka.consumer:type=consumer-fetch-manager-metrics,client-id={client-id}。这应该等同于consumer-groups.sh

的输出

答案 1 :(得分:-2)

要向消费者公开JMX指标,只需添加

-Dcom.sun.management.jmxremote.port=9090 
-Dcom.sun.management.jmxremote.authenticate=false  
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.local.only=false

基于Java的消费者应用程序的参数,然后可以使用jconsole工具和localhost:9090 url访问它。在那里你可以找到 kafka.consumer:type = consumer-fetch-manager-metrics bean。