查看以字节为单位的Kafka主题的大小

时间:2017-04-18 13:30:44

标签: apache-kafka

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

我一直在寻找如何做到这一点,如果可能的话,我还没有解决这个问题。如何做到这一点。

我们在Kafka的V0.82上。

7 个答案:

答案 0 :(得分:7)

您可以使用脚本/bin/kafka-log-dirs.sh

查看分区大小
  

/bin/kafka-log-dirs.sh --describe --bootstrap-server: - topic-list

答案 1 :(得分: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并且想要唯一主题消息的大小,请用复制因子除以得到的值。

答案 2 :(得分:3)

正如Martbob非常有帮助地提到的,你可以使用kafka-log-dirs来做到这一点。我使用的是Confluent Platform 4.1.1开源版,对我来说,至少这会产生JSON输出(在其中一行上)。因此,我可以使用每个如此有用的jq工具来提取“#size”&#39;字段(有些是null),只选择那些数字,将它们分组成一个数组,然后将它们一起添加。

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

示例输出:67704

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

答案 3 :(得分:1)

也许需要一些额外的工作来安装和配置,但是KafkaHQ包含有关主题和分区大小的信息(以消息和字节为单位)。这里链接到:KafkaHQ

那仍然是我发现的最简单的选择。

答案 4 :(得分:0)

您需要在主题级别覆盖名为retention.bytes的配置。

E.g。在你的情况下,如果你的主题已经创建,它应该是这样的:

bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic metrics 
--config retention.bytes=1073741824

请注意每个分区应用retention.bytes,因此总磁盘空间为number of partitions * retention bytes

有关详细信息,请阅读此文档,搜索“保留”。 https://kafka.apache.org/082/documentation.html#topic-config https://kafka.apache.org/082/documentation.html#brokerconfigs

答案 5 :(得分:0)

如果您在 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)

答案 6 :(得分:0)

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

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

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