4

应如何为在具有数据库连接的 Kafka Streams 之上运行的 Spring Boot 服务正确配置健康指标?我们使用 Spring Cloud Streams 和 Kafka Streams 绑定、Spring-Data JPA、Kubernetes 作为容器管理程序。我们假设每个主题有 3 个服务副本和 9 个分区。典型的服务通常将来自两个主题的消息连接起来,并将数据保存在数据库中,然后将数据发布回另一个 kafka 主题。

切换到 Spring Boot 2.3.1 并将 K8s liveness/readiness 端点更改为新端点后:

  • /执行器/健康/活力
  • /执行器/健康/准备就绪

我们发现默认情况下它们不包含任何健康指标。

根据文件

Actuator 将“liveness”和“readiness”探针配置为 Health Groups;这意味着他们可以使用所有健康组功能。(...) 默认情况下,Spring Boot 不会将其他 Health Indicators 添加到这些组中。

我相信这是正确的方法,但我没有测试过:

management.endpoint.health.group.readiness.include: readinessState,db,binders
management.endpoint.health.group.liveness.include: livenessState,ping,diskSpace

我们尝试涵盖以下用例:

  • 滚动更新:添加新副本时不可用的消费槽(空闲实例)
  • 流已死(已抛出运行时异常)
  • DB 在容器启动期间/服务运行时不可用
  • 经纪人不可用

我发现了一个类似的问题,但是我相信当前的问题与 Kafka 服务特别相关。它们在本质上与 REST 服务不同。

更新: 在 Spring Boot 2.3.1 中,Binders 健康指示器检查流是否处于 Kafka 2.5 的 RUNNING 或 REBALANCING 状态(仅在 RUNNING 之前),所以我猜想具有空闲实例的滚动更新情况是由它的逻辑处理的。

4

0 回答 0