Возможно ли, что 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 (и журнала карт) несколькими заданиями. Журнал карты производил события как пакет с задержкой, но не как поток.
Решаемые. Спасибо!