首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多输出主题的Kafka流拓扑的并发性

具有多输出主题的Kafka流拓扑的并发性
EN

Stack Overflow用户
提问于 2021-01-19 17:22:07
回答 1查看 612关注 0票数 5

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

示例

代码语言:javascript
复制
    KStream<..., ...> filteredStream = builder.stream("input-topic", ...).filter(...)...;

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

在本例中,在调用output-topic-__one mapTwo或将消息发布到output-topic-__two?之前,会执行mapOne并将其发布到吗?换句话说,是否保证在将output-topic-__two消息发布到mapOne消息之前,将完成

拓扑可视化

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

拓扑描述

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2021-08-06 02:36:38

卡夫卡流总是保证拓扑秩序。它总是在拓扑中传递消息,拓扑具有边缘和节点。当您在应用程序中定义拓扑时,这些边和节点添加到拓扑中。

在您的示例中,filtered stream在拓扑中遍历map values branch,直到该路径结束(在您的示例中是接收器->主题1)。

然后继续使用flat map branch。直到水槽转到话题二。

该ID的排序是正确的。

0000000004 -> 0000000005 -> 0000000006 -> 0000000007

0000000004 -> 0000000008 -> 0000000009

欲了解更多信息,请访问Kafka源代码内部拓扑生成器

并参考

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65796417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档