【问题标题】:When could a task in Kafka Streams have more than one input partition?Kafka Streams 中的任务何时可以有多个输入分区?
【发布时间】:2021-11-28 14:30:01
【问题描述】:

给定this answer

所有主题的最大分区数决定了任务的数量。

AbstractTask的代码如下:

final Set<TopicPartition> inputPartitions

我想知道什么时候(如果有的话)一个任务可以分配多个分区?

【问题讨论】:

    标签: apache-kafka-streams


    【解决方案1】:

    例如,如果您执行join()merge()copartition(),则任务将具有多个输入分区。此外,如果您通过模式订阅一次阅读多个主题。

    它是正交的

    所有主题的最大分区数决定了任务的数量

    引用是关于创建任务的数量,与每个任务的分区数量无关。

    假设您有两个输入主题 A 有 2 个分区(A-0A-1)和 B 只有一个分区(B-0)。你的程序是:

    KStream a = builder.stream("A",...);
    KStream b = builder.stream("B",...);
    a.merge(b);
    

    你的程序是合乎逻辑的:

    topic-A ---+
               +---> merge()
    topic-B ---+
    

    对于这种情况,你会得到两个任务:

    Task 0_0:
    
    A-0 ---+
           +--- merge() -->
    B-0 ---+
    
    Task 0_1:
    
    A-1 ---+
           +--- merge() -->
    

    注意第二个任务0_1只有一个输入分区,因为主题B只有1个分区。

    任务基本上是您的(逻辑)程序的副本(物理实例化),它处理了名称为分区号的所有分区。因为 topic-A 有两个分区,所以需要创建两个任务。

    【讨论】:

    • 它是正交的吗?我一定在这里遗漏了一些重要的东西。如果分区的数量任务的数量,那怎么可能有一个任务有多个分区?!这对我来说似乎并不明显。介意我让你进一步详细说明吗?
    • 这是否仅适用于 Streams DSL?如何创建一个Processor 来演示这个每个任务多分区的案例?可以从 Kafka Streams 的哪一部分资源中学习?
    • 用更多细节更新了答案。
    • 谢谢!继续探索合并的内部! Danke schon mein Freund Matthias! Das ist eine wunderbare Antwort! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    相关资源
    最近更新 更多