我正在尝试了解Kafka流API的架构,并在documentation中遇到了这个问题:
应用程序的处理器拓扑通过将其分解为多个任务来缩放
将处理器拓扑分解为任务的所有标准是什么?它只是流/主题中的分区数量还是更多。
然后,任务可以根据分配的分区实例化自己的处理器拓扑
有人可以通过一个例子解释上述内容吗?如果仅为了缩放的目的创建任务,那么它们是否都具有相同的拓扑?
答案 0 :(得分:4)
任务是原子并行处理单元。
拓扑分为子拓扑(子拓扑是"连接组件"在内存中转发数据;不同的子拓扑通过主题连接)。对于每个子拓扑,输入主题分区的数量决定了创建的任务数。如果有多个输入主题,则所有主题的最大分区数决定了任务数。
如果您想了解Kafka Streams应用程序的子拓扑,可以致电Topology#describe()
:返回的TopologyDescription
可以通过toString()
打印,也可以遍历 - 拓扑及其相应的DAG。