对于度量标准,我们需要查看所有分区和代理的Kafka主题的总大小(以字节为单位)。
我一直在寻找如何做到这一点,如果可能的话,我还没有解决这个问题。如何做到这一点。
我们在Kafka的V0.82上。
答案 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
我希望这对想要复制和粘贴命令的人有所帮助。