Запуск инструмента сброса приложения гарантирует, что состояние вашего приложения - как отслеживается глобально в настроенном кластере приложения Kafka - сбрасывается. Тем не менее, по своему замыслу инструмент сброса не изменяет и не сбрасывает локальную среду экземпляров приложения, которая включает в себя локальный каталог состояния приложения. Для полного сброса приложения необходимо также удалить локальный каталог состояния приложения на всех компьютерах, на которых был запущен экземпляр приложения, до перезапуска экземпляра приложения на тех же компьютерах. Вы можете либо использовать метод API KafkaStreams # cleanUp () в своем коде приложения, либо вручную удалить соответствующий каталог локальных состояний (state.dir
параметр конфигурации).
app.cleanup()
метод удаляет локальные хранилища состояний. app.startUp()
запускает приложение KStream.
- Требует ли app.cleanUp () выполнения app.start ()?
app.cleanup()
метод удаляет локальные хранилища состояний. app.startUp()
требуется для запуска приложения KStream. Если вы хотите просто убрать магазины, вы можете позвонить только cleanUp()
. Но если вы хотите запустить приложение, вам нужно также вызвать метод startUp()
.
Зачем иметь app.cleanUp (), а затем app.start (), при каких обстоятельствах это будет полезно?
Когда вы хотите сбросить приложение до самого раннегосмещение и запустить его с начала, нужно вызвать метод cleanUp()
. Если вы хотите возобновить остановленное приложение из текущего состояния, не вызывайте cleanUp () в коде вашего приложения. Не рекомендуется использовать очистку по умолчанию как часть приложения, если в этом нет необходимости. Также вы не можете удалить хранилища в работающем приложении, поэтому всегда вызывайте cleanUp()
перед startUp()
методом.
Почему бы просто не иметь флаг, который говорит, что это cleanUp, тогда просто запустите app.cleanUp (), и он не запустится app.start ();
Да, выможет сделать это на основе вашего варианта использования. Определите флаг в файле конфигурации и добавьте условную очистку. Пример:
if(cleanUpFlag){
app.cleanUp();
}
app.start();
Если вы хотите автоматизировать весь процесс для глобальной и локальной очистки, вы можете написать скрипт, который принимает файл конфигурации в качестве входных данных. Вы можете обновить значение флага flag=true
в этом файле конфигурации как true. Также убедитесь, что переменная config используется в условии if.
if(properties.getProperty("cleanUp.flag") == true){
app.cleanUp();
}
Пример:
# After stopping all application instances, reset the application
$ bin/kafka-streams-application-reset --application-id my-streams-app \
--input-topics my-input-topic \
--intermediate-topics rekeyed-topic \
--bootstrap-servers brokerHost:9092 \
--zookeeper zookeeperHost:2181
# Run your application
$ java –DApp.config.file=app.properties –jar KStreamDemo.jar