Как правильно настроить индикаторы работоспособности для службы Spring Boot, работающей поверх Kafka Streams с подключением к БД? В качестве гипервизора контейнера используем Spring Cloud Streams и привязку Kafka Streams, Spring-Data JPA, Kubernetes. У нас есть, скажем, 3 реплики службы и 9 разделов для каждой темы. Типичная служба обычно объединяет сообщения из двух тем, сохраняет данные в базе данных и публикует данные обратно в другую тему kafka.
После перехода на Spring Boot 2.3.1 и изменения конечных точек живости/готовности K8s на новые:
- /актуатор/здоровье/живость
- /привод/здоровье/готовность
мы обнаружили, что по умолчанию у них нет никаких индикаторов работоспособности.
Согласно документация:
Actuator настраивает тесты жизнеспособности и готовности как группы работоспособности; это означает, что им доступны все функции групп здоровья. (...) По умолчанию Spring Boot не добавляет в эти группы другие индикаторы работоспособности.
Я считаю, что это правильный подход, но я не проверял это:
management.endpoint.health.group.readiness.include: readinessState,db,binders
management.endpoint.health.group.liveness.include: livenessState,ping,diskSpace
Мы стараемся охватить следующие варианты использования:
- скользящее обновление: недоступный слот потребления (инстанс бездействия) при добавлении новой реплики
- поток умер (выдано исключение во время выполнения)
- БД недоступна во время запуска контейнера/во время работы службы
- брокер недоступен
Я нашел похожий вопрос, однако я считаю, что текущий конкретно связанные с сервисами Kafka. Они отличаются по своей природе от сервисов REST.
Обновление: В весенней загрузке 2.3.1 индикатор состояния связывателей проверяет, находятся ли потоки в состоянии RUNNING или REBALANCING для Kafka 2.5 (ранее только RUNNING), поэтому я предполагаю, что случай непрерывного обновления с незанятым экземпляром обрабатывается его логика.