Возможно ли, что Sources.mapJournal() работает медленно для частого обновления IMap?

Я пытаюсь эмулировать рисование потока из Sources.mapJournal через IMap, который получает данные с устройства IoT. Обработка этого потока слишком медленная, и я получаю большой накопленный результат через 30-60 секунд.

Когда я начал часто обновлять IMap с небольшими данными (12 КБ на значение), исключение:

com.hazelcast.ringbuffer.StaleSequenceException: sequence: 123 слишком мало, и хранилище данных отключено.

Я увеличил емкость журнала IMap по умолчанию в 10 раз. После этого он стал стабильным, но очень медленным. Аналогичная проблема возникает, когда я обновляю IMap с большими значениями (около 1,2 МБ за 5 секунд). Кроме того, у меня есть несколько подключенных устройств IoT, и у каждого из них есть свое задание Jet с одним и тем же конвейером:

StreamStage<TagPosition> sourceSteam = 
    p.drawFrom(Sources.<TagPosition, String, TagPosition>mapJournal(
        Constants.IMAP_TAGS_POSITIONS_BUFFER,
        Util.mapPutEvents().and(entry -> ((String) entry.getKey()).startsWith(instanceNumber)),
        Util.mapEventNewValue(),
        JournalInitialPosition.START_FROM_OLDEST));

// Drain to SmartMap
sourceSteam.drainTo(SmartMapSinks.newTagPositionSink(instanceNumber));

Заранее спасибо!

UPD:

  • Размер журнала - EventJournalConfig.DEFAULT_CAPACITY * 10 = 100 000 (1 раздел).
  • Jet версия 0.7.2
  • Сериализуемые классы реализуют com.hazelcast.nio.serialization.IdentifiedDataSerializable

1 ответ

Решение

Проблема заключалась в использовании одного IMap (и журнала карт) несколькими заданиями. Журнал карты производил события как пакет с задержкой, но не как поток.

Решаемые. Спасибо!

Другие вопросы по тегам