我们正在使用Prometheus和Grafana监视我们的Kafka集群。
在我们的应用程序中,我们使用Kafka流,并且有可能由于异常而使Kafka流停止。我们正在记录事件setUnCaughtExceptionHandler
,但是,当流停止时,我们还需要某种警报。
我们目前拥有的是,jmx_exporter作为代理运行,并通过端点公开Kafka度量,而prometheus从端点获取度量。
我们看不到任何指标可以提供每个主题的活跃消费者数量。我们错过了什么吗?有关如何获取活动使用者数量并在使用者停止时发送警报的任何建议。
答案 0 :(得分:2)
我们有类似的需求,并将每个分区的Kafka Consumer Lag添加到了Grafana中,并且还添加了警报,如果延迟超过了指定的阈值(每个主题的阈值应有所不同,具体取决于负载,例如某些主题可能为10,对于高负载-100000)。因此,如果您有更多的东西,例如1000条未处理的消息,您将收到警报。
您可以为每个kafka流添加状态侦听器,以防流处于错误状态,记录错误或发送电子邮件:
kafkaStream.setStateListener((newState, oldState) -> {
log.info("Kafka stream state changed [{}] >>>>> [{}]", oldState, newState);
if (newState == KafkaStreams.State.ERROR || newState == KafkaStreams.State.PENDING_SHUTDOWN) {
log.error("Kafka Stream is in [{}] state. Application should be restarted", newState);
}
});
您还可以添加运行状况检查指示器(例如,通过REST端点或通过spring-boot
HealthIndicator
),以提供有关流是否正在运行的信息:
KafkaStreams.State streamState = kafkaStream.state();
state.isRunning();
我还没有找到任何kafka流指标来提供有关活动使用者或可用连接分区的信息,但就我而言,如果kafka流提供此类数据就很好(并希望在将来的发行版中可用)。