ksqldb - KSQL查询线程数
问题描述
有没有办法指定在 KSQL Server 上运行的 KSQL 查询应该消耗的线程数?换句话说就是查询的并行性。
可以在 KSQL Server 上运行的应用程序数量是否有任何限制?何时或如何决定向外扩展?
解决方案
是的,您可以指定ksql-streams-num-streams-threads
属性。你可以在这里阅读更多关于它的信息。
现在,这是针对该特定 KSQL 实例进行流处理的 KSQL Streams 线程数。这对于垂直扩展很重要,因为您的机器中可能有足够的计算资源来处理更多线程,因此您可以在该特定机器上做更多的工作来处理您的流。
如果您有容量(即:CPU 核心),那么您应该有更多线程,以便可以在该实例上安排更多 Stream 任务,因此在您的 KSQL 实例或集群上具有额外的并行化容量(如果您有多个实例)。
使用 Kafka、Kafka Streams 和 KSQL,您必须了解的是水平扩展有两个主要概念:
- Kafka Streams 应用程序(例如 KSQL)可以根据 kafka 主题分区的数量并行化工作。如果您有 3 个分区并启动 4 个 KSQL 实例(即:在不同的服务器上),那么其中一个不会在您在该主题之上创建的 Stream 上工作。如果您有 3 个分区的相同主题并且您只有 1 个 KSQL Server,那么他将为 3 个分区完成所有工作。
- 当您添加应用程序 Kafka 流应用程序(在您的情况下为 KSQL)的新实例并加入处理 KSQL 流和表的集群时,此特定实例将加入消费这些主题的消费者组,并立即开始与其他实例,只要有其他实例可以卸载的可用分区(触发消费者组重新平衡)。如果您关闭一个实例,也会发生同样的情况......其他实例将填补空缺并开始处理退役实例正在处理的分区。
与垂直扩展(即:向 KSQL 实例添加更多容量和线程)相比,水平扩展通过将相同的计算资源添加到不同机器上的应用程序的不同实例来实现相同的效果。您可以在此处了解 Kafka 流应用程序线程模型(具有一个或多个应用程序实例,在一台或多台机器上):
我试图简化它,但您可以在KSQL 容量规划页面和Confluent Kafka Streams Elastic Scale 博客文章中阅读更多内容
Kafka Streams(和 KSQL)应用程序的扩展/缩减生命周期的重要方面可以更好地理解如下:
1. 单个实例在 4 个不同的分区上工作
2. 三个实例在 4 个不同的分区上工作(其中一个在 2 个不同的分区上工作)
3. 一个实例刚刚离开组,现在两个实例在 4 个不同的分区上工作,完美平衡(每个 2 个分区)
(图片来自融合博客)
推荐阅读
- django - DoesNotExist at /accounts/login/ (delate example.com from admin page)
- javascript - 如何在 localStorage 中不断更新数据?
- javascript - 从远程托管页面访问 soket.io 服务器 - 需要未定义
- javascript - 使用 Bing Image API Javascript 搜索图像
- python - python替换数据框熊猫中所有列的多个值
- sql - 当 Rows 对应于其他列中的 MAX 时保持 NULL
- firebase - 我可以使用不同的参数并行运行自定义菜单中的谷歌应用程序脚本功能吗?
- javascript - FIrebase 应用程序未在 Vue3-Ionic 项目上初始化
- javascript - 检查 JS 远程替换、Shopify 中的变体可用性
- docker - 仅在发布阶段指定环境变量