Потоки Кафки: InvalidStateStoreException - PullRequest
0 голосов
/ 02 июня 2018

Если потоковое приложение с состоянием запускается с 6 потоками на одном узле, произойдет ли указанное выше исключение?

Существует ли какой-либо процесс, которому необходимо следовать, если потоковое приложение с состоянием запущено на узле 1, потребляющемопределенная тема, предназначенная для запуска на другом узле?

Если потоковое приложение с состоянием запускается на 2 узлах и если возникает указанное выше исключение, будет ли потоковое приложение немедленно завершено?

  • Если да, где это исключение может быть перехвачено в блоке try-catch?
    Если исключение можно перехватить, и если мы добавим режим сна на 10 минут, магазин автоматически попадет вдействительное состояние?
  • Если нет, существует ли метод, который можно использовать для проверки состояния хранилища и ожидания его вступления в силу?

Последующие действия:

Если потоковое приложение с состоянием запускается с 6 потоками на одном узле, произойдет ли указанное выше исключение?

Это может

По сути, мне было интересно, еслимы сохраняем весь объем потребления темы на одном узле. Будет ли он предотвращать перестройку хранилища из внутренней темы, если произойдет перебалансировка из-за того, что один из потоков отключается / завершается?

хранилище еще не готово: вы можете подождать, пока хранилище не будет готово - лучше всего зарегистрировать обратный вызов восстановления (см. Документацию), чтобы получить информацию о завершении восстановления, и вы можете повторить попыткузапросить хранилище.

Извините, просто чтобы прояснить вышесказанное, это StateRestoreCallback ИЛИ StateRestoreListener?Я предполагаю, что это позже.Кроме того, требуется ли переопределить StateRestoreCallback и включить логику для восстановления хранилища?

1 Ответ

0 голосов
/ 03 июня 2018

InvalidStateStoreException может иметь разные причины, поэтому трудно ответить на ваш вопрос без дополнительного контекста.

Если потоковое приложение с состоянием запускается с 6 потоками на одном узле, будет ливозникла исключительная ситуация?

Может.

Существует ли какой-либо процесс, которому необходимо следовать, если запущено потоковое приложение с состоянием, запущенное на узле 1, использующем определенную тему?работать на другом узле?

Нет.

Если потоковое приложение с сохранением состояния запускается на 2 узлах и если возникает указанное выше исключение, будет ли потоковое приложение завершено немедленно?

Зависит от того, где сгенерировано исключение:

  • Либо соответствующий StreamThread умрет, но приложение не завершится автоматически.Вы должны зарегистрировать обработчик необработанных исключений в экземпляре KafkaStreams и реагировать на умирающий поток с помощью пользовательского кода (например, завершение приложения).
  • Если он генерируется из KafkaStreams с использованием интерактивных запросов, StreamThread не будет затронуто.

Где можно обнаружить это исключение в блоке try-catch?

Обычно да, особенно если вы ссылаетесь на интерактивные запросы

Если мы добавим режим сна на 10 минут, будет ли магазин автоматически переведен в действительное состояние?

Если вы ссылаетесь на функцию интерактивных запросов, то сон не является хорошимстратегия.Есть несколько причин для исключения, и вы должны реагировать соответственно:

  • хранилище не локальное, а на другом узле: это можно выяснить, проверив метаданные хранилища.
  • storeеще не готов: вы можете подождать, пока магазин не будет готов - лучше всего зарегистрировать прослушиватель восстановления (подробности смотрите в документации), чтобы получить информацию о завершении восстановления, и вы можете повторить запрос к хранилищу.

Обновление

По сути, мне было интересно, если мы сохраним весь объем потребления темы на одном узле, можно ли избежать повторного построения хранилища из внутренней темы, если-балансировка происходит из-за того, что один из потоков выходит из строя / завершается?

Да (для случая не EOS).Другие потоки будут обнаруживать локальное хранилище и повторно использовать его.

StateRestoreCallback ИЛИ StateRestoreListener

Да, это StateRestoreListener.Вы бы реализовали StateRestoreCallback, только если вы напишите собственное хранилище состояний.

...