如何构建高效的 Kafka broker 健康检查?

Posted

技术标签:

【中文标题】如何构建高效的 Kafka broker 健康检查?【英文标题】:How to build efficient Kafka broker healthcheck? 【发布时间】:2015-10-06 23:50:33 【问题描述】:

在我的应用程序中,我将对我的 Kafka 集群执行某种健康检查。

目前我创建了一个TopicMetadataRequest 来检测死经纪人:

  Future 
    // this will fail if Kafka is unavailable
    consumer.send(new TopicMetadataRequest(Seq("health-check-topic"), 1))
  

不幸的是,由于集群拓扑/设置,此调用会产生巨大的网络流量。

有没有更好的方法来检查 kafka 经纪人?我需要的是像true/false 指示器这样简单的东西。

【问题讨论】:

只是一个想法,但这个问题是否可以更好地放在服务器故障上? 从回答转向评论 - github.com/andreas-schroeder/kafka-health-check 【参考方案1】:

我强烈建议您使用 Yahoo Kafka Manager,它提供了与 Kafka 设置相关的所有信息。 (例如,在一段时间内发送/消耗的字节数)。此工具还可用于管理您的 Kafka 集群。

它还公开了 Restful API,如果需要,您可以在自己的应用程序中使用这些 API。请点击以下链接访问它。

https://github.com/yahoo/kafka-manager

【讨论】:

谢谢。这个库的一个问题是你不能在我的项目中将它用作 lib 依赖项。它必须单独部署。但这是一个不错的库:)【参考方案2】:

您也可以使用 Zookeeper API 获取代理列表,如下所示:

ZooKeeper zk = new ZooKeeper(KafkaContextLookupUtil.getZookeeperConnect().getZkConnect(), 10000, null);
    List<String> ids = zk.getChildren("/brokers/ids", false);
    List<Map> brokerList = new ArrayList<>();
    ObjectMapper objectMapper = new ObjectMapper();

    for (String id : ids) 
        Map map = objectMapper.readValue(zk.getData("/brokers/ids/" + id, false, null), Map.class);
        brokerList.add(map);
    
    return brokerList;

【讨论】:

这只是获取一个代理列表。实际上并不检查客户端是否可以代理进行通信。 如果一些经纪商倒闭,名单会改变吗?【参考方案3】:

如果您想构建自己的健康检查,这是当前(2020 年 1 月)KIPs 的列表,涵盖健康检查:

KIP-143: Controller Health Metrics KIP-188: Add new metrics to support health checks KIP-237: More Controller Health Metrics

关于Harvinder Singh的currently accepted answer:

Kafka Manager 很棒,但它是 evolving slowly。当然有Confluent Control Center - Confluent Platform 的一部分,但你需要它的许可证。 Confluent 是一家由构建 Apache Kafka 的团队创立的公司。我听说过akHQ (ex KafkaHQ) (HackerNews story)。以下是在Apache Kafka Confluence page 上维护的管理控制台列表(查看那里的 URL):

Kafka Manager - 用于管理 Apache Kafka 的工具。 kafkat - Kafka 代理的简化命令行管理。 Kafka Web 控制台 - 显示有关 Kafka 集群的信息,包括哪些节点已启动以及它们为哪些主题托管数据。 Kafka 偏移量监视器 - 显示所有消费者的状态以及他们落后于流头部的距离。 Capillary - 显示基于 Kafka 的 Apache Storm 拓扑的状态和增量。支持 Kafka >= 0.8。它还提供了一个 API,用于获取此信息以进行监控。 Doctor Kafka - 用于集群自动修复和工作负载平衡的服务。 Cruise Control - 完全自动化 Kafka 集群的动态工作负载再平衡和自我修复。 Burrow - 监控伴侣,将消费者延迟检查作为服务提供,无需指定阈值。 Chaperone - 监控数据流完整性和延迟的审计系统。

如果不需要GUI,还有:

https://github.com/andreas-schroeder/kafka-health-check 及其分支https://github.com/ustream/kafka-health-check

【讨论】:

以上是关于如何构建高效的 Kafka broker 健康检查?的主要内容,如果未能解决你的问题,请参考以下文章

kafka 心跳和 reblance

使用 Kafka Assistant,为您的开发加速

Kafka高级设计和架构,一文深化理解

kafka leader选举机制原理

每日积累Day 7KAFKA架构重温

如何在 KafkaStreams api 中添加主题的健康检查