我有一个kafka集群(3台计算机,每台计算机上运行1个Zookeeper和1个代理) 我正在使用kafka_exporter监视消费者滞后指标,在正常情况下可以正常工作。 但是,当我杀死1个经纪人时,Prometheus无法从http://machine1:9308/metric(kafka_exporter度量标准端点)获取度量标准,因为获取数据花费的时间很长(1.5m),因此将超时。 现在,如果重新启动kafka_exporter,我会看到一些错误:
Cannot get leader of topic __consumer_offsets partition 20: kafka server: In the middle of a leadership election, there is currently no leader for this partition and hence it is unavailable for writes
当我运行命令时:kafka-topics.bat --describe --zookeeper machine1:2181,machine2:2181,machine3:2181 --topic __consumer_offsets 结果是:
Topic:__consumer_offsets PartitionCount:50 ReplicationFactor:1 Configs:compression.type=producer,cleanup.policy=compact,segment.bytes=104857600
Topic: __consumer_offsets Partition: 0 Leader: -1 Replicas: 1 Isr: 1
Topic: __consumer_offsets Partition: 1 Leader: 2 Replicas: 2 Isr: 2
Topic: __consumer_offsets Partition: 49 Leader: 2 Replicas: 2 Isr: 2
这是配置错误吗?在这种情况下,如何获得消费者的滞后? “领导者:-1”是错误的吗?如果我永久关闭计算机1,它仍然可以正常工作吗?
答案 0 :(得分:1)
领导者为-1表示群集中没有其他代理具有分区数据的副本。
您所遇到的问题是主题__consumer_offsets的复制因子为1,这意味着只有一个代理可以承载主题中任何分区的数据。如果您丢失任何一个代理,则代理上的所有分区都将变得不可用,从而导致该主题不可用。因此,您的kafka_exporter将无法阅读该主题。
如果您要继续导出因经纪人损失而产生的消费者补偿,对此的解决方法是将主题__consumer_offsets重新配置为具有大于1的复制因子。
建议的配置-复制因子-3,最小异步副本-2。