Рекомендации ksqlDB для развертывания большого набора запросов

Я запускаю потоковое приложение ksqlDB, которое состоит из большого количества запросов (›60 запросов), включая множество объединений и агрегатов. Мои данные поступают из различных источников и требуют множества манипуляций для получения желаемых обработанных данных, отсюда и большое количество запросов. Я выполнил этот набор запросов на одном компьютере в интерактивном режиме, и он дал правильные результаты. Но я наблюдаю увеличивающееся отставание потребителей, когда увеличиваю объем данных, вводимых в приложение.

Я прочитал на странице Планирование емкости ksqlDB, что можно масштабировать, добавляя больше серверов, что я и планирую сделать.

В разделе Важные факторы выбора размера также сказано, что следует избегать выполнения большого количества запросов в одном кластере ksqlDB. Вместо этого используйте интерактивный режим, чтобы поиграть со своими данными и разработать наборы запросов, которые работают вместе. Затем запустите их в их собственном кластере без заголовка. Однако я не знаю, как это сделать - все мои запросы зависят друг от друга.

Есть ли у кого-нибудь общие рекомендации по развертыванию большого количества взаимозависимых запросов ksql? В качестве дополнительного требования данные обновляются каждый день и не зависят от каждого нового дня, поэтому мне нужно выполнять какое-то обновление запросов каждый день.


person jiexun    schedule 23.03.2021    source источник


Ответы (1)


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

Другой способ, если вы используете интерактивный режим, - это разбить ваши темы на разделы и добавить в кластер дополнительные серверы ksql. Это позволит ksql разделить рабочую нагрузку по кластеру, при этом каждый сервер будет использовать и обрабатывать один раздел. Скажем, у вас есть 4 раздела на тему и 2 сервера, тогда у вас будет 1 сервер, обрабатывающий 2 раздела, а другой сервер - еще 2 раздела. Это должно снизить нагрузку на каждый сервер.

Еще одно улучшение - уменьшение количества потоков потоков. Каждый создаваемый вами запрос по умолчанию запускается с 4 потоками kafka. Чем больше потоков, тем больше параллельной работы выполняется на сервере. При большом количестве запросов производительность снижается, а задержка увеличивается. Попробуйте с 1 потоком и посмотрите, работает ли это. Установите ksql.streams.num.stream.threads=1 в ksql-server.properties, чтобы настроить его.

person Sergio    schedule 24.03.2021