繁体   English   中英

具有多个 output 主题的 Kafka 流拓扑的并发性

[英]Concurrency of Kafka streams topology with multiple output topics

给定一个将消息发布到两个不同主题的 Kafka 流拓扑,是否可以保证在这两个分支中执行各个步骤的顺序,或者这些分支是否完全分开并并行执行?

例子

    KStream<..., ...> filteredStream = builder.stream("input-topic", ...).filter(...)...;

    filteredStream.mapValues(this::mapOne).to("output-topic-one", ...);
    filteredStream.flatMap(this::mapTwo).to("output-topic-two", ...);

在此示例中, mapTwo是否会mapOne被调用或消息发布到output-topic- 2之前执行并发布到output -topic -one ? 换句话说,是否可以保证mapOne消息发布到output-topic- 2之前完成?

拓扑可视化

查看拓扑描述的可视化时(见底部;使用https://zz85.github.io/kafka-streams-viz/ 制作),您可以看到两个分支。 但是您也可以在每个气泡中看到这些数字,这也可能表明存在执行顺序(1-4,然后是 5-6-7,然后是 8-9)。

kafka流拓扑

拓扑描述

Topologies:
   Sub-topology: 0
    Source: KSTREAM-SOURCE-0000000000 (topics: [input-topic])
      --> KSTREAM-FILTER-0000000001
    Processor: KSTREAM-FILTER-0000000001 (stores: [])
      --> KSTREAM-FILTER-0000000002
      <-- KSTREAM-SOURCE-0000000000
    Processor: KSTREAM-FILTER-0000000002 (stores: [])
      --> KSTREAM-MAP-0000000003
      <-- KSTREAM-FILTER-0000000001
    Processor: KSTREAM-MAP-0000000003 (stores: [])
      --> KSTREAM-FILTER-0000000004
      <-- KSTREAM-FILTER-0000000002
    Processor: KSTREAM-FILTER-0000000004 (stores: [])
      --> KSTREAM-MAPVALUES-0000000005, KSTREAM-FLATMAP-0000000008
      <-- KSTREAM-MAP-0000000003
    Processor: KSTREAM-MAPVALUES-0000000005 (stores: [])
      --> KSTREAM-FILTER-0000000006
      <-- KSTREAM-FILTER-0000000004
    Processor: KSTREAM-FILTER-0000000006 (stores: [])
      --> KSTREAM-SINK-0000000007
      <-- KSTREAM-MAPVALUES-0000000005
    Processor: KSTREAM-FLATMAP-0000000008 (stores: [])
      --> KSTREAM-SINK-0000000009
      <-- KSTREAM-FILTER-0000000004
    Sink: KSTREAM-SINK-0000000007 (topic: output-topic-one)
      <-- KSTREAM-FILTER-0000000006
    Sink: KSTREAM-SINK-0000000009 (topic: output-topic-two)
      <-- KSTREAM-FLATMAP-0000000008

Kafka 流始终保证拓扑顺序。 它总是在拓扑中传递消息,该拓扑具有边和节点。 当您在应用程序中定义拓扑时,这些边和节点会添加到拓扑中。

在您的情况下,通过map values branch filtered stream go 直到该路径结束(在您的情况下为接收器 - >主题一)。

然后它继续flat map branch 直到下沉到话题二。

它使用该 ID 正确排序。

0000000004 -> 0000000005 -> 0000000006 -> 0000000007

0000000004 -> 0000000008 -> 0000000009

更多信息 go 通过Kafka源代码内部拓扑构建器

并参考这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM