【发布时间】:2018-10-07 20:32:01
【问题描述】:
我有来自 3 个 mysql 表、1 个主表和两个子表的原始流。我尝试加入三个原始流并转换为单个输出流。如果父流有任何更新,则它可以工作,但如果子流有任何变化,则不会触发输出。
@StreamListener
public Stream<Long, Output> handleStreams(@Input KStream<Long, Parent> parentStream,
@Input KStream<Long, Child1> child1Stream,
@Input KStream<Long, Child2> child2Stream) {
KTable<Long, Parent> parentTable = convertParent(parentStream);
KTable<Long, ArrayList<Child1>> child1Table = convertChild1(parentStream);
KTable<Long, ArrayList<Child2>> child2Table = convertChild2(parentStream);
parentTable
.leftJoin(child1Table, (parent, child1List) -> new Output(k, v))
.leftJoin(child2Table, (output, child2List) -> output.setChild2List(child2List))
.toStream()
}
父流上的任何新添加或更新都会被处理器拾取并将其与其他 KTable 连接并在输出流中返回。但是对 child1stream 或 child2stream 的任何添加或更新都不会触发输出流。
我认为将所有输入流设为 KTable,它们将始终存储更改,因为它们都具有相同的键,并且父表或子表上的任何更新都将被连接。但这并没有发生,任何人都可以建议我在这方面缺少什么吗?
我已经尝试过 KStream-KStream、Stream-KTable、KTable-KTable 连接,但在子更新的情况下它们都不起作用。
-谢谢
【问题讨论】:
标签: apache-kafka-streams spring-cloud-stream confluent-platform