如何解决用于部署大量查询的 ksqlDB 建议
我正在运行一个 ksqlDB 流应用程序,它包含大量查询(>60 个查询),包括许多连接和聚合。我的数据来自各种来源,需要大量操作才能生成所需的处理数据,因此需要大量查询。我已经在一台机器上运行了这组查询,使用交互模式,它产生了正确的结果。但是,当我增加输入应用程序的数据量时,我发现消费者延迟越来越大。
我在 ksqlDB 的 Capacity Planning 页面上读到,我可以通过添加更多服务器来扩展,这是我计划做的。
在Important Sizing Factors下,还声明“您应该避免在一个 ksqlDB 集群上运行大量查询。相反,使用交互模式来处理您的数据并开发一组可以协同工作的查询. 然后,在它们自己的无头集群中运行它们。” 但是,我不确定如何执行此操作 - 我的查询都相互依赖。
有人对如何部署大量相互依赖的 ksql 查询有任何一般性建议吗?作为一个额外的要求,数据每天刷新并且每个新的一天都是独立的,所以我需要每天对查询进行某种刷新。
解决方法
如果您可以将相互依赖的查询分组,然后将这些组拆分为无外设模式的服务器,我认为这只是一个建议。
如果您使用交互模式,另一种方法是对主题进行分区并向集群添加更多 ksql 服务器。这将允许 ksql 跨集群拆分工作负载,每个服务器消耗和处理一个分区。假设每个主题有 4 个分区和 2 个服务器,那么您将有 1 个服务器处理 2 个分区,另一台服务器处理其他 2 个分区。这应该会减少每台服务器的工作量。
另一个改进是减少流线程的数量。默认情况下,您创建的每个查询都使用 4 个 kafka 流线程运行。线程数越多,服务器中完成的并行工作就越多。对于大量查询,性能会降低并且延迟会增加。尝试使用 1 个线程,看看是否有效。在 ksql-server.properties 中设置 ksql.streams.num.stream.threads=1
以对其进行配置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。