【问题标题】:KSQL Query number of ThreadKSQL查询线程数
【发布时间】:2019-11-17 11:24:34
【问题描述】:

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

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

【问题讨论】:

    标签: ksqldb


    【解决方案1】:

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

    现在,这是针对特定 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 Capacity Planning pageConfluent Kafka Streams Elastic Scale Blog Post 上阅读更多内容

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

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

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

    3。一个实例刚刚离开组,现在两个实例正在处理 4 不同的分区,完美平衡(每个分区 2 个)

    (Images 来自 confluent 博客)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-24
      • 2020-02-25
      • 2019-09-01
      • 2020-01-30
      • 2023-02-08
      • 2020-01-30
      • 2019-11-16
      • 1970-01-01
      相关资源
      最近更新 更多