Apache kafka Kafka监视:来自JMX的请求延迟
我们希望监控卡夫卡,并有两个具体要求:使用无头工具和将性能指标存储在CSV文件中。在Gwen Shapira系列[1]之后,我开始倾向于请求延迟和kafka.tools.JmxTool 设置:卡夫卡0.11,公开JMX,无头公制采集工具 Q:JMX bean提供了[2]中介绍的指标,可能是每个代理提供的:“请求队列”、“请求本地”、“响应远程”、“响应队列”、“响应发送” [1] 幻灯片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的网站免费获得)中有一个关于监
[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名称吗?这不完全是问题所要求的(但你实际上也回答正确),但实际的细节正是我想要的,非常感谢:)这不完全是问题所要求的(但你实际上也回答正确),但实际的细节正是我想要的,非常感谢:)