我正在运行一个由大量查询(>60个查询)组成的ksqlDB流应用程序,其中包括许多连接和聚合。我的数据来自不同的来源,需要大量的操作来生成所需的处理数据,因此需要大量的查询。我使用交互模式在一台机器上运行了这组查询,并产生了正确的结果。但是,当我增加输入应用程序的数据量时,我发现消费者的延迟会越来越大。
我在ksqlDB的容量规划页面上看到,我可以通过添加更多的服务器来进行缩放,这就是我计划要做的。
在重要尺寸因素下,还指出“您应该避免在一个ksqlDB集群上运行大量的查询。相反,使用交互模式来处理数据并开发一组可以一起使用的查询。然后,在它们自己的无头集群中运行这些查询。”但是,我不知道如何做到这一点--我的查询都是相互依赖的。
有没有人对如何部署大量相互依赖的ksql查询有任何一般性建议?作为一个补充需求,数据每天都会刷新,并且在每一天都是独立的,所以我需要每天对查询进行某种刷新。
发布于 2021-03-24 14:16:57
我认为这只是一个建议,如果您可以将相互依赖的查询分组,然后将这些组划分为无头模式服务器。
如果您使用交互模式,另一种方法是对主题进行分区,并向集群中添加更多的ksql服务器。这将允许ksql在集群中拆分工作负载,每个服务器都在消耗和处理一个分区。假设每个主题有4个分区和2个服务器,那么您将有1个服务器处理2个分区,另一个服务器处理另外2个分区。这将减少每个服务器上的工作负载。
另一个改进是减少流线程的数量。默认情况下,您创建的每个查询都使用4个kafka流线程运行。线程数量越多,服务器中的并行工作就越多。由于大量的查询,性能下降,滞后增加。试着用一个线程,看看它是否有效。在ksql-server.properties中设置ksql.streams.num.stream.threads=1来配置它。
https://stackoverflow.com/questions/66756212
复制相似问题