Понимание IgniteDataStreamer: порядок и буферизация - PullRequest
0 голосов
/ 03 октября 2019

Я использую IgniteDataStreamer с allowOverwrite для загрузки непрерывных данных.

Вопрос 1. От javadoc:

Обратите внимание, что стример будет передавать данные одновременно по нескольким внутреннимпотоков, поэтому данные могут попадать на удаленные узлы в другом порядке, в котором они были добавлены в стример.

Изменение порядка в моем случае неприемлемо. Будет ли perNodeParallelOperations установлен на 1 гарантировать сохранение порядка addData вызовов? Существует несколько кэшей, одновременно загружаемых с помощью IgniteDataStreamer, поэтому все потоки узла сервера Ignite будут все равно использоваться.

Вопрос 2. Из-за паузы GC мое потоковое приложение может зависнуть на пару секунд. Я хочу избежать паузы загрузки кеша в этот момент и поддерживать высокую среднюю скорость записи в кеш. Можно ли настроить IgniteDataStreamer для хранения (ограниченной) очереди входящих пакетов на узле сервера, которые будут использоваться при зависании потокового (клиентского) приложения? Смотрите вопрос 1, очередь должна потребляться последовательно. Можно использовать некоторую кучу для этого.

Вопрос 3. perNodeBufferSize javadoc:

Этот параметр управляет размером внутреннего буфера для узла перед отправкой буферизованных данных на удаленный сервер. узел

Согласно javadoc, передача данных инициируется tryFlush / flush / autoFlush, так как это соотносится с ограничением perNodeBufferSize? Будет ли сбрасываться сброс, если сообщений меньше perNodeBufferSize (надеюсь нет)?

1 Ответ

1 голос
/ 04 октября 2019

Я не рекомендую пытаться избежать переупорядочения в DataStreamer, но если вам абсолютно необходимо это сделать, вам также нужно установить размер пула потоков данных на 1 на узлах сервера. Если он больше, то данные разбиваются на полосы и не отправляются последовательно.

DataStreamer предназначен для пропускной способности, а не для задержки. Так что тут мало что можно сделать. Увеличение perThreadBufferSize, возможно?

Передача данных автоматически начинается при достижении perThreadBufferSize для любой полосы.

...