Как проверить, пуст ли Kafka с помощью Spring Kafka?

#apache-kafka #spring-kafka

#apache-kafka #spring-kafka

Вопрос:

Когда я перезапускаю свое приложение, мне нужно обрабатывать оставшиеся сообщения в Kafka, пока оно не опустеет, и тогда мое приложение должно продолжать нормально работать. Моя проблема в том, как проверить, пуст ли раздел Kafka. Я использую Spring Kafka.

Комментарии:

1. Ваш вопрос слишком широкий. Под Kafka вы имеете в виду конкретную тему Kafka? Кроме того, что вы подразумеваете под пустым ? Вы хотите проверить, не зафиксировано ли новых смещений или тема полностью пуста?

2. Да, это конкретная тема Kafka

Ответ №1:

Установите idleEventInterval свойство контейнера, и вы сможете прослушивать, ListenerContainerIdleEvents которое будет публиковаться каждый раз, когда в течение этого интервала не будут получены записи — см. Документацию.

Несмотря на эффективность, одна проблема с асинхронными потребителями заключается в обнаружении, когда они простаивают. Возможно, вам захочется предпринять некоторые действия, если в течение некоторого периода времени сообщения не поступают.

Вы можете настроить контейнер listener для публикации ListenerContainerIdleEvent, когда пройдет некоторое время без доставки сообщения. Пока контейнер простаивает, событие публикуется каждые миллисекунды idleEventInterval.

Ответ №2:

Вы могли бы просто отправить специальное сообщение «restart» в тему с уникальным идентификатором или специальным типом (например, type: RESTART ) и настроить прослушиватель Kafka для уведомления вашего приложения (например, через отдельный раздел Kafka) при получении сообщения «restart».