首页 > 解决方案 > 用于部署大量查询的 ksqlDB 建议

问题描述

我正在运行一个由大量查询(>60 个查询)组成的 ksqlDB 流应用程序,包括许多连接和聚合。我的数据来自各种来源,需要大量操作才能生成所需的处理数据,因此需要大量查询。我已经在一台机器上使用交互模式运行了这组查询,它产生了正确的结果。但是,当我增加输入应用程序的数据量时,我观察到消费者延迟的增加。

我在 ksqlDB 的容量规划页面上读到,我可以通过添加更多服务器来扩展,这是我计划做的。

重要的大小因素下,它还指出“您应该避免在一个 ksqlDB 集群上运行大量查询。相反,使用交互模式来处理您的数据并开发一起运行的查询集。然后,在它们自己的无头集群。” 但是,我不确定该怎么做——我的查询都是相互依赖的。

有没有人对如何部署大量相互依赖的 ksql 查询有任何一般性建议?作为一项附加要求,数据每天刷新并且对于每一天都是独立的,因此我需要每天对查询进行某种刷新。

标签: apache-kafkaconfluent-platformksqldb

解决方案


如果您可以将相互依赖的查询分组,然后将这些组拆分为无头模式服务器,我认为这只是一个建议。

如果您使用交互模式,另一种方法是对您的主题进行分区并将更多 ksql 服务器添加到您的集群中。这将允许 ksql 跨集群拆分工作负载,每台服务器使用和处理一个分区。假设每个主题有 4 个分区和 2 个服务器,那么您将有 1 个服务器处理 2 个分区,而另一台服务器处理其他 2 个分区。这应该会减少每台服务器上的工作量。

另一个改进是减少流线程的数量。默认情况下,您创建的每个查询都使用 4 个 kafka 流线程运行。线程数越多,服务器中完成的并行工作就越多。随着大量查询,性能下降并且延迟增加。尝试使用 1 个线程,看看是否有效。ksql.streams.num.stream.threads=1在 ksql-server.properties 中设置来配置它。


推荐阅读