Apache kafka Kafka监视:来自JMX的请求延迟

Apache kafka Kafka监视:来自JMX的请求延迟,apache-kafka,jmx,Apache Kafka,Jmx,我们希望监控卡夫卡,并有两个具体要求:使用无头工具和将性能指标存储在CSV文件中。在Gwen Shapira系列[1]之后,我开始倾向于请求延迟和kafka.tools.JmxTool 设置:卡夫卡0.11,公开JMX,无头公制采集工具 Q:JMX bean提供了[2]中介绍的指标,可能是每个代理提供的:“请求队列”、“请求本地”、“响应远程”、“响应队列”、“响应发送” [1] 幻灯片 [2] 期望卡夫卡指标 在“卡夫卡:权威指南”(pdf可从Confluent的网站免费获得)中有一个关于监

我们希望监控卡夫卡,并有两个具体要求:使用无头工具和将性能指标存储在CSV文件中。在Gwen Shapira系列[1]之后,我开始倾向于请求延迟kafka.tools.JmxTool

设置:卡夫卡0.11,公开JMX,无头公制采集工具

Q:JMX bean提供了[2]中介绍的指标,可能是每个代理提供的:“请求队列”、“请求本地”、“响应远程”、“响应队列”、“响应发送”

[1] 幻灯片

[2] 期望卡夫卡指标


在“卡夫卡:权威指南”(pdf可从Confluent的网站免费获得)中有一个关于监控的好章节。本书显示了以下与请求相关的度量:


在“卡夫卡:权威指南”(pdf可从Confluent的网站免费获得)中有一个关于监控的好章节。本书显示了以下与请求相关的度量:


经过一番探索后,以下是在端口3999打开Kafka JMX并收集请求的完整设置指标:

1在3999打开Kafka JMX端口: 更新
bin/kafka run class.sh

# JMX settings
if [ -z "$KAFKA_JMX_OPTS" ]; then
  KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=0.0.0.0 -Djava.net.preferIPv4Stack=true"
fi

# JMX port to use
if [  $JMX_PORT ]; then
  KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=${JMX_PORT} -Dcom.sun.management.jmxremote.rmi.port=${JMX_PORT} "
fi
if [ -z "$JMX_PORT" ]; then
  export JMX_PORT=3999
fi     
更新
bin/kafka服务器start.sh

# JMX settings
if [ -z "$KAFKA_JMX_OPTS" ]; then
  KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=0.0.0.0 -Djava.net.preferIPv4Stack=true"
fi

# JMX port to use
if [  $JMX_PORT ]; then
  KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=${JMX_PORT} -Dcom.sun.management.jmxremote.rmi.port=${JMX_PORT} "
fi
if [ -z "$JMX_PORT" ]; then
  export JMX_PORT=3999
fi     
2用bash脚本收集卡夫卡指标并将其发布到journalctl:
#/bin/bash
管道=/tmp/kafka-monitoring-temp.out
mkfifo$管道
#开始日志记录到日志
系统cat-t“卡夫卡监控”<$PIPE&
睡眠障碍=$(
sleep 9999d>$PIPE&保持管道打开
echo$!#但请允许我们稍后关闭它。。。
)
arrayName=(“kafka.network:type=RequestMetrics,name=RequestQueueTimeMs,request=Fetch”
kafka.network:type=RequestMetrics,name=LocalTimeMs,request=Fetch
kafka.network:type=RequestMetrics,name=RemoteTimeMs,request=Fetch
“kafka.network:type=RequestMetrics,name=responsequeueetimems,request=Fetch”
kafka.network:type=RequestMetrics,name=ResponseSendTimeMs,request=Fetch
)
用于“${arrayName[@]}”中的名称;做
超时1s/ust/lib/kafka/bin/kafka-run-class.sh kafka.tools.JmxTool--对象名“${name}”-jmx url服务:jmx:rmi:///jndi/rmi://127.0.0.1:3999/jmxrmi --报告间隔1100 |三通$PIPE
完成
杀死$sleep\u pid
rm$管道

经过一番探索后,以下是在端口3999打开Kafka JMX并收集请求的完整集合指标:

1在3999打开Kafka JMX端口: 更新
bin/kafka run class.sh

# JMX settings
if [ -z "$KAFKA_JMX_OPTS" ]; then
  KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=0.0.0.0 -Djava.net.preferIPv4Stack=true"
fi

# JMX port to use
if [  $JMX_PORT ]; then
  KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=${JMX_PORT} -Dcom.sun.management.jmxremote.rmi.port=${JMX_PORT} "
fi
if [ -z "$JMX_PORT" ]; then
  export JMX_PORT=3999
fi     
更新
bin/kafka服务器start.sh

# JMX settings
if [ -z "$KAFKA_JMX_OPTS" ]; then
  KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=0.0.0.0 -Djava.net.preferIPv4Stack=true"
fi

# JMX port to use
if [  $JMX_PORT ]; then
  KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=${JMX_PORT} -Dcom.sun.management.jmxremote.rmi.port=${JMX_PORT} "
fi
if [ -z "$JMX_PORT" ]; then
  export JMX_PORT=3999
fi     
2用bash脚本收集卡夫卡指标并将其发布到journalctl:
#/bin/bash
管道=/tmp/kafka-monitoring-temp.out
mkfifo$管道
#开始日志记录到日志
系统cat-t“卡夫卡监控”<$PIPE&
睡眠障碍=$(
sleep 9999d>$PIPE&保持管道打开
echo$!#但请允许我们稍后关闭它。。。
)
arrayName=(“kafka.network:type=RequestMetrics,name=RequestQueueTimeMs,request=Fetch”
kafka.network:type=RequestMetrics,name=LocalTimeMs,request=Fetch
kafka.network:type=RequestMetrics,name=RemoteTimeMs,request=Fetch
“kafka.network:type=RequestMetrics,name=responsequeueetimems,request=Fetch”
kafka.network:type=RequestMetrics,name=ResponseSendTimeMs,request=Fetch
)
用于“${arrayName[@]}”中的名称;做
超时1s/ust/lib/kafka/bin/kafka-run-class.sh kafka.tools.JmxTool--对象名“${name}”-jmx url服务:jmx:rmi:///jndi/rmi://127.0.0.1:3999/jmxrmi --报告间隔1100 |三通$PIPE
完成
杀死$sleep\u pid
rm$管道

除了对其含义的一些描述之外,这里还提供了它们。我希望有帮助

请求队列:请求在请求队列等待的时间

网络:type=RequestChannel,name=RequestQueueSizeMs

请求本地:在领导者处处理请求的时间

network:type=RequestMetrics,name=LocalTimeMs,request=product

远程响应:等待追随者处理请求的时间

network:type=RequestMetrics,name=RemoteTimeMs,request=product

响应队列:请求在响应队列等待的时间

网络:type=RequestMetrics,name=responsequeueetimems,request=product

响应发送:发送响应的时间

网络:type=RequestMetrics,name=ResponseSendTimeMs


在这里,它们是对其含义的补充说明。我希望有帮助

请求队列:请求在请求队列等待的时间

网络:type=RequestChannel,name=RequestQueueSizeMs

请求本地:在领导者处处理请求的时间

network:type=RequestMetrics,name=LocalTimeMs,request=product

远程响应:等待追随者处理请求的时间

network:type=RequestMetrics,name=RemoteTimeMs,request=product

响应队列:请求在响应队列等待的时间

网络:type=RequestMetrics,name=responsequeueetimems,request=product

响应发送:发送响应的时间

网络:type=RequestMetrics,name=ResponseSendTimeMs


你的意思是你想知道这些指标的确切MBean名称吗?你的意思是你想知道这些指标的确切MBean名称吗?这不完全是问题所要求的(但你实际上也回答正确),但实际的细节正是我想要的,非常感谢:)这不完全是问题所要求的(但你实际上也回答正确),但实际的细节正是我想要的,非常感谢:)