You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Paramiko获取Kafka消费组延迟总和始终为0,手动执行正常

问题排查与解决方案

核心问题:消费组名称含多余换行符

你用stdout.readlines()获取的消费组列表,每个元素末尾都带有换行符(\n),直接代入命令后,--group参数会变成"消费组名\n",Kafka找不到这个不存在的组,所以awk计算的延迟总和自然是0。

修复步骤

  1. 清理消费组名称
    遍历列表时,用strip()去掉每个名称的首尾空白(包括换行、空格),同时跳过空行:
for consumer in list_consumers:
    consumer = consumer.strip()
    if not consumer:
        continue
    # 后续命令执行逻辑
  1. 验证拼接后的命令
    先打印拼接好的命令,确认消费组名称没有多余字符:
cmd = f"/home/prduser/kafka_2.12-2.1.0/bin/kafka-consumer-groups.sh --bootstrap-server localhost:19092,localhost:29092,localhost:39092 --describe --group {consumer} | awk '{{sum+=$5}} END {{print sum}}'"
print(cmd)  # 检查命令格式是否正确
stdin, stdout, stderr = ssh.exec_command(cmd)
  1. 检查错误输出
    不要忽略stderr的内容,执行后打印错误信息,排查其他潜在问题:
err_msg = stderr.read().decode('utf-8')
if err_msg:
    print(f"命令执行错误: {err_msg}")

额外排查方向

  • 环境变量差异:手动执行时的shell环境和Paramiko的执行环境可能不同,可尝试用bash -lc加载用户配置后执行命令:
cmd = f'bash -lc "/home/prduser/kafka_2.12-2.1.0/bin/kafka-consumer-groups.sh --bootstrap-server localhost:19092,localhost:29092,localhost:39092 --describe --group {consumer} | awk \'{{sum+=$5}} END {{print sum}}\'"'
stdin, stdout, stderr = ssh.exec_command(cmd)
  • 确认awk字段位置:不同Kafka版本的--describe输出列顺序可能变化,手动执行该命令确认第5列确实是延迟数值。

内容的提问来源于stack exchange,提问作者Ashok Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:45:49