Kafka Streams API 中的任务有什么用途

Vir*_*raj 1 apache-kafka apache-kafka-streams

我试图了解 Kafka Streams API 的架构,并在文档中遇到了这一点:

应用程序的处理器拓扑通过将其分解为多个任务来扩展

将处理器拓扑分解为任务的所有标准是什么?仅仅是流/主题中的分区数量还是更多。

然后,任务可以根据分配的分区实例化自己的处理器拓扑

有人可以用例子解释上面的意思吗?如果创建任务只是为了扩展,那么它们不应该具有相同的拓扑吗?

Mat*_*Sax 5

任务是原子并行处理单元。

拓扑分为子拓扑(子拓扑是在内存中转发数据的“连接组件”;不同的子拓扑通过主题连接)。对于每个子拓扑,输入主题分区的数量决定了创建的任务数量。如果有多个输入主题,则所有主题的最大分区数决定任务数。

如果您想了解 Kafka Streams 应用程序的子拓扑,您可以调用Topology#describe():返回的结果TopologyDescription可以仅通过打印toString(),也可以遍历子拓扑及其相应的 DAG。


Kafka Streams 应用程序具有一种拓扑,该拓扑可能具有一个或多个子拓扑。您可以在文章使用 Kafka 中的 Streams API 进行数据重新处理:重置 Streams 应用程序中找到具有 2 个子拓扑的拓扑。