Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Kafka流通过具有复杂条件的键连接_Java_Apache Kafka_Apache Kafka Streams_Kafka Join - Fatal编程技术网

Java Kafka流通过具有复杂条件的键连接

Java Kafka流通过具有复杂条件的键连接,java,apache-kafka,apache-kafka-streams,kafka-join,Java,Apache Kafka,Apache Kafka Streams,Kafka Join,我正试图通过键连接KStream和GlobalKTable,但要使用特定的逻辑 StreamsBuilder builder = new StreamsBuilder(); KStream<String, Integer> stream = builder.stream(inputTopic1); // key = "ABC" GlobalKTable<String, Integer> table = builder.globalTable(inp

我正试图通过键连接
KStream
GlobalKTable
,但要使用特定的逻辑

    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 */});
StreamsBuilder builder=newstreamsbuilder();
KStream stream=builder.stream(inputOpic1);//key=“ABC”
GlobalKTable=builder.globalTable(inputOpic2);//key=“ABC”
join(表,//首先通过“ABC”=“ABC”连接,然后通过“AB”=“AB”,然后通过“A”=“A”连接
(键,值)->键,
(valueLeft,valueRigth)->{/*标识执行联接的条件*/});
例如,如果key=“ABC”,则:

  • 首先,用完整的键连接,即“ABC”=“ABC”
  • 然后,如果未连接,则通过前两个符号连接(删除一个符号)-即“AB”=“AB”
  • 最后,尝试只使用一个符号连接,即“A”=“A”
此外,还需要知道连接执行的条件-例如,3个字母/2个字母/1个字母

问题是,这是可能的还是我应该寻找一个解决办法?例如,用相应的键复制GlobalKTable(表带有“ABC”键,一个带有“AB”键,一个带有“A”键),并执行3个单独的联接?或者其他建议


提前谢谢

对多个表使用一系列左联接是可能的(如果您知道经常要尝试联接)。如果联接成功,则跳过下一个联接。结合使用
leftJoin()
branch()
应该允许您在每次连接后将流拆分为“已连接”和“重试”。最后,如果需要,可以
merge()
将不同的结果流合并在一起