Kafka kstream-kstream объединяется с раздвижными окнами. Использование памяти растет с течением времени, пока OOM - PullRequest
0 голосов
/ 12 марта 2019

У меня проблема с использованием соединений kstream.Что я делаю, это из одной темы, я разделяю 3 различных типа сообщений на новые потоки.Затем выполните одно внутреннее соединение с двумя потоками, которое создает другой поток, и, наконец, я выполняю последнее левое соединение с новым потоком и последним оставшимся потоком.

Соединения имеют время окна 30 секунд.

Это сделано для того, чтобы отфильтровать некоторые сообщения, которые были переопределены другими.

Я запускаю это приложение на kubernetes, и дисковое пространство для модулей увеличивается до бесконечности, пока модуль не выйдет из строя.

Я понял, что это потому, что объединения хранят данные локально в каталоге tmp / kafka-streams.

Каталоги называются: KSTREAM-JOINTHIS ... KSTREAM-OUTEROTHER..

Который хранит sst файлы из rockDb, и они растут бесконечно.

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

Я также изменил WINDOW_STORE_CHANGE_LOG_ADDITIONAL_RETENTION_MS_CONFIG на 10 минут, чтобы посмотреть, не вносит ли это изменение.

Мне нужно понять, как это можно изменить.

1 Ответ

0 голосов
/ 17 марта 2019

Размер окна определяет не ваши требования к хранилищу, а срок хранения объединения. Для обработки неупорядоченных записей данные хранятся дольше размера окна (по умолчанию время хранения составляет 1 день).

Вы можете сократить время хранения, передав Materialized.as(null).withRetention(...) своим join(...) операторам.

В более старой версии Kafka вы определяете срок хранения через определение окна, например, JoinWindows.of(...).until(...).

Конфигурация WINDOW_STORE_CHANGE_LOG_ADDITIONAL_RETENTION_MS_CONFIG определяет продолжительность хранения данных в кластере. Таким образом, возможно, вы захотите уменьшить его, но это не поможет снизить требования к хранилищу на стороне клиента.

...