ksqlDB建议部署大型查询集



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

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

在重要尺寸因素下,还指出";您应该避免在一个ksqlDB集群上运行大量查询。相反,使用交互式模式来处理数据,并开发一组可以一起工作的查询。然后,在它们自己的无头集群中运行这些集群">然而,我不确定如何做到这一点-我的查询都是相互依赖的。

有人对如何部署大量相互依赖的ksql查询有什么一般性的建议吗?作为一项额外的要求,数据每天都会刷新,并且对于新的一天是独立的,所以我需要每天对查询进行某种刷新。

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

如果使用交互模式,另一种方法是对主题进行分区,并向集群中添加更多的ksql服务器。这将允许ksql在集群中划分工作负载,每个服务器消耗和处理一个分区。假设您每个主题有4个分区和2个服务器,那么您将有1个服务器处理2个分区,另一个服务器处理其他2个分区。这样可以减少每个服务器上的工作负载。

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