java - Spring Boot:Kafka 健康指标
问题描述
我有类似下面的东西效果很好,但我更喜欢在不发送任何消息的情况下检查运行状况(不仅检查套接字连接)。我知道 Kafka 有开箱即用的 KafkaHealthIndicator 之类的东西,有人有使用它的经验或例子吗?
public class KafkaHealthIndicator implements HealthIndicator {
private final Logger log = LoggerFactory.getLogger(KafkaHealthIndicator.class);
private KafkaTemplate<String, String> kafka;
public KafkaHealthIndicator(KafkaTemplate<String, String> kafka) {
this.kafka = kafka;
}
@Override
public Health health() {
try {
kafka.send("kafka-health-indicator", "❥").get(100, TimeUnit.MILLISECONDS);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
return Health.down(e).build();
}
return Health.up().build();
}
}
解决方案
kafkaAdminClient.describeCluster(..)
是测试 Kafka 可用性的地方。
@Configuration
public class KafkaConfig {
@Autowired
private KafkaAdmin kafkaAdmin;
@Bean
public AdminClient kafkaAdminClient() {
return AdminClient.create(kafkaAdmin.getConfigurationProperties());
}
@Bean
public HealthIndicator kafkaHealthIndicator(AdminClient kafkaAdminClient) {
final DescribeClusterOptions options = new DescribeClusterOptions()
.timeoutMs(1000);
return new AbstractHealthIndicator() {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
// When Kafka is not connected, describeCluster() method throws
// an exception which in turn sets this indicator as being DOWN.
kafkaAdminClient.describeCluster(options);
builder.up().build();
}
};
}
}
如需更详细的探测,请添加:
DescribeClusterResult clusterDesc = kafkaAdminClient.describeCluster(options);
builder.up()
.withDetail("clusterId", clusterDesc.clusterId().get())
.withDetail("nodeCount", clusterDesc.nodes().get().size())
.build();
推荐阅读
- angular - 如何使用 ngx-extended-pdf-viewer 显示本地 pdf?
- python - Discord.py 意外缩进
- php - 如何通过添加缺失键和空键对多维数组进行排序?
- c# - 从 Azure IoT 中心触发器读取原始数据
- python - 尝试使用 python 和 selenium 选择下拉列表时出现问题
- ionic-framework - 哪个库最适合在 ionic 中混淆代码?
- c# - 数据库数据未更新
- javascript - 在 node.js 中未执行回调函数
- javascript - 如何使用核心 api 在 Reactjs 中编辑导入的 Excel 工作表
- ms-word - Word mailmerge 宏在调试模式下运行良好,但是当关闭显示代码时,它的行为很奇怪