apache-kafka - 用于部署大量查询的 ksqlDB 建议
问题描述
我正在运行一个由大量查询(>60 个查询)组成的 ksqlDB 流应用程序,包括许多连接和聚合。我的数据来自各种来源,需要大量操作才能生成所需的处理数据,因此需要大量查询。我已经在一台机器上使用交互模式运行了这组查询,它产生了正确的结果。但是,当我增加输入应用程序的数据量时,我观察到消费者延迟的增加。
我在 ksqlDB 的容量规划页面上读到,我可以通过添加更多服务器来扩展,这是我计划做的。
在重要的大小因素下,它还指出“您应该避免在一个 ksqlDB 集群上运行大量查询。相反,使用交互模式来处理您的数据并开发一起运行的查询集。然后,在它们自己的无头集群。” 但是,我不确定该怎么做——我的查询都是相互依赖的。
有没有人对如何部署大量相互依赖的 ksql 查询有任何一般性建议?作为一项附加要求,数据每天刷新并且对于每一天都是独立的,因此我需要每天对查询进行某种刷新。
解决方案
如果您可以将相互依赖的查询分组,然后将这些组拆分为无头模式服务器,我认为这只是一个建议。
如果您使用交互模式,另一种方法是对您的主题进行分区并将更多 ksql 服务器添加到您的集群中。这将允许 ksql 跨集群拆分工作负载,每台服务器使用和处理一个分区。假设每个主题有 4 个分区和 2 个服务器,那么您将有 1 个服务器处理 2 个分区,而另一台服务器处理其他 2 个分区。这应该会减少每台服务器上的工作量。
另一个改进是减少流线程的数量。默认情况下,您创建的每个查询都使用 4 个 kafka 流线程运行。线程数越多,服务器中完成的并行工作就越多。随着大量查询,性能下降并且延迟增加。尝试使用 1 个线程,看看是否有效。ksql.streams.num.stream.threads=1
在 ksql-server.properties 中设置来配置它。
推荐阅读
- java - 我的循环正在用数字七、六次填充我的数组,为什么?
- ios - 当我重新启动 UIViewPropertyAnimation 时不要再次移动
- r - data.table 将所有单元格值右移每行内的 na 数 [R]
- mysql - 如果'table a'.'column a'匹配'table b'.'column a',如何用'table b'.'column b'替换'table a'.'column b'
- android-studio - Android Studio 中的 Flutter 在 Linux 中运行得更好吗?
- google-maps - 是否可以报告产生 Google Maps API 命中的单个页面?
- css - 某些单元格的基础 XY 网格全宽
- java - 第一次将数据库连接到 NetBeans
- f# - Fsharp /如何将(string * FsTree)列表的类型节点更改为2paths不能相同的列表
- ios - 获取没有标题的 UIBUtton XCUITest swift