Я делаю весеннее приложение, используя Storm 1.1.2, JDK 8 (Storm не понравился скомпилированный код JDK 9), Kafka 0.11 и Docker Compose.
Идея состоит в том, чтобы создать контейнерную службу, которая может принимать вызовы REST для создания топологических топологий, а затем отправлять их в кластер штормов. Все работало локально, но перемещение отправки топологии из отправки в локальный кластер в StormSubmitter
вызывает проблемы. У меня есть большинство из них решены, но есть странная проблема сериализации.
У меня есть носик, который успешно читает с Кафки. Он читает байтовые массивы объектов Protobuf и использует собственный десериализатор для создания сообщений из них. У меня есть два разных болта, считывающих этот носик, один из которых печатает входящие сообщения (болт A), а другой фильтрует сообщения на основе поля и отправляет их на другой болт, который будет агрегирован (болт B).
Единственное различие, которое я замечаю между двумя болтами, состоит в том, что болт B имеет конструктор, а болт A - нет.
По какой-то причине болт А без проблем получает сообщения из носика и печатает их, но каждый раз, когда сообщение приходит к болту Б, он выдает исключение com.esotericsoftware.kryo.KryoException: Class cannot be created (missing no-arg constructor): my.package.MyProtobufMessage
. Я вижу, что вы можете зарегистрировать сериализаторы для классов, но почему болт А может обрабатывать сообщение, когда болт Б не может?
Также отдельная проблема, но когда я добавляю третью топологию, nimbus не назначает ему супервизора. Одна топология будет работать с 2-мя работами и 9-ю руководителями, вторая топология будет работать с 2-мя работниками и 6-ю руководителями, а затем я добавлю третью топологию, которая будет отображаться в журналах UI и Nimbus, но не в журналах супервизора. В пользовательском интерфейсе третьей топологии будет 0 рабочих, execs и 0 назначенных mem