首页 > 解决方案 > KSQL查询线程数

问题描述

有没有办法指定在 KSQL Server 上运行的 KSQL 查询应该消耗的线程数?换句话说就是查询的并行性。

可以在 KSQL Server 上运行的应用程序数量是否有任何限制?何时或如何决定向外扩展?

标签: ksqldb

解决方案


是的,您可以指定ksql-streams-num-streams-threads属性。你可以在这里阅读更多关于它的信息。

现在,这是针对该特定 KSQL 实例进行流处理的 KSQL Streams 线程数。这对于垂直扩展很重要,因为您的机器中可能有足够的计算资源来处理更多线程,因此您可以在该特定机器上做更多的工作来处理您的流。

如果您有容量(即:CPU 核心),那么您应该有更多线程,以便可以在该实例上安排更多 Stream 任务,因此在您的 KSQL 实例或集群上具有额外的并行化容量(如果您有多个实例)。

使用 Kafka、Kafka Streams 和 KSQL,您必须了解的是水平扩展有两个主要概念:

  1. Kafka Streams 应用程序(例如 KSQL)可以根据 kafka 主题分区的数量并行化工作。如果您有 3 个分区并启动 4 个 KSQL 实例(即:在不同的服务器上),那么其中一个不会在您在该主题之上创建的 Stream 上工作。如果您有 3 个分区的相同主题并且您只有 1 个 KSQL Server,那么他将为 3 个分区完成所有工作。
  2. 当您添加应用程序 Kafka 流应用程序(在您的情况下为 KSQL)的新实例并加入处理 KSQL 流和表的集群时,此特定实例将加入消费这些主题的消费者组,并立即开始与其他实例,只要有其他实例可以卸载的可用分区(触发消费者组重新平衡)。如果您关闭一个实例,也会发生同样的情况......其他实例将填补空缺并开始处理退役实例正在处理的分区。

与垂直扩展(即:向 KSQL 实例添加更多容量和线程)相比,水平扩展通过将相同的计算资源添加到不同机器上的应用程序的不同实例来实现相同的效果。您可以在此处了解 Kafka 流应用程序线程模型(具有一个或多个应用程序实例,在一台或多台机器上): 在此处输入图像描述

我试图简化它,但您可以在KSQL 容量规划页面Confluent Kafka Streams Elastic Sc​​ale 博客文章中阅读更多内容

Kafka Streams(和 KSQL)应用程序的扩展/缩减生命周期的重要方面可以更好地理解如下:

1. 单个实例在 4 个不同的分区上工作

单个实例在 4 个不同的分区上工作

2. 三个实例在 4 个不同的分区上工作(其中一个在 2 个不同的分区上工作)

三个实例在 4 个不同的分区上工作(其中一个在 2 个不同的分区上工作)

3. 一个实例刚刚离开组,现在两个实例在 4 个不同的分区上工作,完美平衡(每个 2 个分区)

一个实例刚刚离开组,现在两个实例在 4 个不同的分区上工作,完全平衡(每个 2 个分区)

图片来自融合博客)


推荐阅读