簡體   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