簡體   English   中英

Kafka Streams 按復雜條件鍵加入

[英]Kafka Streams join by key with complex condition

我正在嘗試通過鍵將KStreamGlobalKTable連接KStream ,但具有特定的邏輯。

    StreamsBuilder builder = new StreamsBuilder();
    KStream<String, Integer> stream = builder.stream(inputTopic1); // key = "ABC"
    GlobalKTable<String, Integer> table = builder.globalTable(inputTopic2); // key = "ABC"

    stream.join(table, // join first by "ABC" = "ABC", then by "AB" = "AB", then by "A" = "A"
            (key, value) -> key,
            (valueLeft, valueRigth) -> {/* identify by which condition the join was performed */});

例如,如果 key = "ABC",則:

  • 首先,通過完整的鍵加入 - 即“ABC”=“ABC”
  • 然后,如果沒有加入,則通過前兩個符號加入(刪除一個符號) - 即“AB”=“AB”
  • 最后,嘗試只加入一個符號 - 即“A”=“A”

此外,還需要知道執行連接的條件 - 例如,通過 3 個字母 / 通過 2 個字母 / 通過 1 個字母。

問題是,是否有可能,或者我應該尋找解決方法? 例如,使用相應的鍵(帶有“ABC”鍵的表,帶有“AB”鍵的表和帶有“A”鍵的表)制作 GlobalKTable 的副本並執行 3 個單獨的連接? 或者也許還有其他建議?

提前致謝!

對多個表使用一系列左連接是可能的(如果您知道經常想嘗試連接)。 如果連接成功,則跳過下一個連接。 使用leftJoin()branch()應該允許您在每次加入后將流拆分為“加入”和“重試”。 最后,如果需要,您可以merge()不同的結果流合並在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM