是否存在API或客户端库,可以告诉我主题中填充了多少数据百分比,以便我了解是否有任何方法来检查分区是否平衡
在设计和开发Kafka之前,这是一个很好的策略。
你需要考虑的第一点是,你是如何定义你的密钥的,以及在为主题生成消息时,你计划使用什么分区器。
拇指规则:
- 如果您不想根据密钥在不同的组中收集消息,只需将密钥传递为null,以循环方式重新分发消息
- 您还可以使用自定义分区器来定义分区,以防需要进行更多的细化
要检查分区分布,最好的方法是检查每个分区上的滞后和速率字节/秒
有很多方法可以监控
1.您可以使用简单的API来获得各种矩阵,如滞后、速率等
你可以在这里参考Kafka Metrices
kafka.server:type=ReplicaFetcherManager,name=MaxLag,clientId=Replica
2.我通常更喜欢导出JMX的Grafana,它将显示矩阵
Grafana
3.我们还可以使用CLI来识别每个分区的偏移和滞后,并立即为您提供总体数据
bin/kafka-consumer-groups.sh --bootstrap-server broker1:9092 --describe --group consumer-group
TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
test 1 10 30 20 consumer-group
您也可以通过编程如何识别分区滞后
Confluent Control Center是付费的,但它是一个非常有趣的工具,可以监控整个Kafka,包括消费者及其分区/汇流控制中心
假设您创建了一个主题X。您的生产者开始向您的主题中推送大量数据。你的话题呈指数级增长。根据log.segment.bytes的配置,Kafka将创建一个新的段并开始向其中写入数据。旧的段将保留log.reduration.ms毫秒。正因为如此,一个话题本身的100%都是很难计算的。
然而,如果您正在寻找一种可以根据每个代理的负载分配分区的工具,那么我建议您查看Kafka工具包(https://www.datadoghq.com/blog/engineering/introducing-kafka-kit-tools-for-scaling-kafka/)。