Вариант использования заключается в передаче sh записей из разделов, которые не получили новые данные в потоках kafka, поскольку мы используем подавление, для которого требуется время потока.
Итак, у нас есть Window Store с падающим окном 1 минута с уменьшенной операцией с подавлением. Конструкция подавления зависит от времени потока. Поэтому, если какой-либо раздел не получает новую запись о потребителе, то подавление не будет продвигаться для ожидающей записи о потребителе в этом разделе.
Стоит отметить, что период хранения хранилища состояний установлен на 65 секунд.
Итак, чтобы сделать явный грипп sh из хранилища состояний окон, решил go с помощью transform api и использовал его в топологии DSL.
В узле преобразования мы используем context.schedule для планирования пунктуатора чтобы получить доступ к хранилищу состояний и выполнить оконный запрос, например fetchall (startTimeInstant, endTimeInstant), чтобы получить старые ключи, которые еще не очищены.
Из документации следует отметить, что срок хранения является минимальным время данные будут оставаться в окне хранилища. Только если все записи в окне достаточно стары, тогда только оно сбрасывается.
Теперь идея состоит в том, что успешных записей не должно быть в хранилище состояний, когда мы запускаем fetchall (как время начала (ut c -3 минуты). Но до 6 минут старые данные, которые были удалены, все еще там в хранилище окон.
ПРОБЛЕМА здесь - я не хочу видеть старые записи в хранилище окон, так как тогда полезная нагрузка должна быть просмотрена / проанализирована, чтобы сделать выбор, следует ли * flu26 * 10 * данные или нет, что сильно повышает производительность.
Я также проверил политику хранения / изменения topi c журнала изменений. Он также имеет 65 секунд.
Я знаю подход classi c это отправить пакет keep alive на все разделы ввода topi c, но в нашем случае это невозможно, так как ввод topi c используется несколькими клиентами. Все они должны будут измениться.