【问题标题】:See size of Kafka Topics in Bytes查看 Kafka 主题的大小(以字节为单位)
【发布时间】:2017-09-14 09:08:45
【问题描述】:

对于指标,我们需要查看所有分区和代理中 Kafka 主题的总大小(以字节为单位)。

我一直在寻找如何做到这一点,但我还没有弄清楚这是否可能以及如何做到这一点。

我们正在使用 Kafka V0.82。

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    对于希望以可读格式输出和所有主题列表的人,这里是:

    bin/kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --list \
      | xargs -I{} sh -c \ 
      "echo -n '{} -> ' && bin/kafka-log-dirs.sh --bootstrap-server 127.0.0.1:9092 --topic-list {} --describe | grep '^{'   | jq '[ ..|.size? | numbers ] | add' | numfmt --to iec --format '%8.4f'" \
      | tee /tmp/topics-by-size.list
    

    这将:

    List all topics in Kafka
    Pass through `xargs` that will execute a command per topic
    Get all logs sizes per topic
      sum each of the logs
      pass through `numfmt` to make it human readable
    save to a file while printing to stdout
    

    我希望这对需要复制和粘贴命令的人有所帮助。

    【讨论】:

      【解决方案2】:

      如果您在 docker 容器 (wurstmeister/kafka) 中运行 kafka 并且您正在获取

       Error: JMX connector server communication error: service:jmx:rmi ...
       sun.management.AgentConfigurationError: java.rmi.server.ExportException: Port already in use: 6099; nested exception is:
         java.net.BindException: Address in use (Bind failed)
      

      您需要在运行 shell 脚本之前取消设置 JMX_PORT

      (unset JMX_PORT; ./kafka-log-dirs.sh \ 
            --bootstrap-server 127.0.0.1:9092 --topic-list test --describe)
      

      【讨论】:

        【解决方案3】:

        可以使用脚本/bin/kafka-log-dirs.sh查看分区大小

        /bin/kafka-log-dirs.sh --describe --bootstrap-server <KafakBrokerHost>:<KafakBrokerPort> --topic-list <YourTopic>
        

        【讨论】:

        • 'kafka-log-dirs --describe --bootstrap-server kafka:9092' 将返回所有主题/分区的状态,'--topic-list' 将缩小该列表。跨度>
        • 我很确定 kafka-log-dirs.sh 不适用于 0.82。
        • 找不到 kafka-log-dirs
        【解决方案4】:

        用正则表达式和 awk 做同样事情的另一种方法(如果你没有安装 jq)是:

        $ bin/kafka-log-dirs.sh \
          --bootstrap-server 127.0.0.1:9092 \
          --topic-list test \
          --describe \
          | grep -oP '(?<=size":)\d+'  \
          | awk '{ sum += $1 } END { print sum }'
        

        这将返回主题test 的大小(以字节为单位),包括其复制。如果您的复制因子大于 1,并且您想要唯一主题消息的大小,请将获得的值除以复制因子。

        【讨论】:

          【解决方案5】:

          正如 Martbob 非常有帮助地提到的,您可以使用 kafka-log-dirs 来做到这一点。这会产生 JSON 输出(在其中一行上)。所以我可以使用非常有用的jq 工具来提取“大小”字段(有些是空的),只选择那些是数字的,将它们分组到一个数组中,然后将它们加在一起。

          kafka-log-dirs \
              --bootstrap-server 127.0.0.1:9092 \
              --topic-list 'topic_of_interest' \
              --describe \
            | grep '^{' \
            | jq '[ ..|.size? | numbers ] | add'
          

          示例输出:67704

          我还没有验证输出是否有意义,所以你应该自己检查一下。

          【讨论】:

          【解决方案6】:

          也许这需要一些额外的工作来安装和配置,但 KafkaHQ 以消息和字节的形式提供了有关主题和分区大小的信息。这里链接到:KafkaHQ

          这仍然是我找到的获取该信息的最简单的选择。

          【讨论】:

            猜你喜欢
            • 2013-05-03
            • 1970-01-01
            • 1970-01-01
            • 2013-02-01
            • 2014-01-27
            • 2018-01-01
            • 1970-01-01
            • 2016-03-19
            • 1970-01-01
            相关资源
            最近更新 更多