И почему shutdown требует отдельной статьи, а не вызова метода stop
Ну начну с того, что за метод stop
такой.
Из документации, существует 2 метода которые собственно отвечают за остановку Structured stream.
query.stop() // Остановить запрос(stream)query.awaitTermination() // заблокировать пока запрос(stream) не прекратиться по причине вызова stop() или ошибки
Уже только по наличие 2ух методов мы может догадаться что метод stop()
асинхронный. Что лично меня навело на мысль, что ни какой проблемы нет и graceful shutdown иметься из коробки.
Но я притворюсь что я умный и читал документацию, а не выгребал ошибки в production. Из документация
Останавливает выполнение этого запроса если он активен. Вызов блокируется до того как прекратиться выполнение query execution threads или по timeout(время не не выйдет, время задается в конфигурации).
И вот тут опытный Java/Scala разработчик по идее должен был напрячься.
Какой то Thread, уж больно напоминающий java thread по названию, прекратиться по сигналу. Да и в добавок к этому еще один, дополнительный, метод который ждет завершения. Это же thread.interupt()
скажите вы, и будете правы - так что ни про какой graceful вообще речь идти не может.