Обычно люди делают это, связывая зависимости с вашим топологическим jar, например, используя maven-shade-plugin.Таким образом, вы можете запускать любые юнит-тесты или интеграционные тесты с новой версией зависимостей, прежде чем запускать их в производство.Я бы предпочел сделать это, если вы обновляете код.
Если вы обновляете пакеты ресурсов или не хотите делать то, что я описал выше, я полагаю, что вы можете использовать функциональность blobstore для замены jar-файлов(еще не проверял это).Storm позволяет загружать BLOB-объекты в кластер, которые затем можно добавлять в качестве зависимостей в топологии.Если вы загружаете свои зависимости в виде больших двоичных объектов в кластер, вы можете указать Storm перезапустить своих работников при обновлении больших двоичных объектов.
Вы можете загрузить свою зависимость в хранилище больших двоичных объектов с помощью storm blobstore create --file your-plugin.jar --acl o::rwa --replication-factor 1 plugin1
.
Затем вы должны отправить свою топологию, выполнив что-то вроде storm jar your-topology.jar com.yourcompany.Topology -c topology.blobstore.map='{"plugin1":{"localname":"plugin1-blob", "uncompress":false, "workerRestart":true}}'
Когда вы хотите обновить your-plugin.jar
, вы делаете storm blobstore update --file your-updated-plugin.jar plugin1
.Это должно заставить Storm загрузить новую версию jar с последующим перезапуском всех работников топологии.
Дополнительную документацию по хранилищу BLOB-объектов смотрите по адресу https://storm.apache.org/releases/2.0.0-SNAPSHOT/distcache-blobstore.html, и документацию по настройке topology.blobstore.map
по адресуhttps://github.com/apache/storm/blob/v2.0.0/storm-client/src/jvm/org/apache/storm/Config.java#L110