KTable<Key1, GenericRecord> primaryTable = createKTable(key1, kstream, statestore-name);
KTable<Key2, GenericRecord> childTable1 = createKTable(key1, kstream, statestore-name);
KTable<Key3, GenericRecord> childTable2 = createKTable(key1, kstream, statestore-name);
primaryTable.leftJoin(childTable1, (primary, choild1) -> compositeObject)
.leftJoin(childTable2,(compositeObject, child2) -> compositeObject, Materialized.as("compositeobject-statestore"))
.toStream().to(""composite-topics)
对于我的应用程序,我使用的是KTable-Ktable连接,这样,只要在主流或子流上接收到数据,就可以使用三个表的setter和getter将它设置为CompositeObject。这三个传入的流具有不同的键,但是在创建KTable时,我将所有三个KTable的键都设为相同。
我的所有主题都只有一个分区。当我在单个实例上运行应用程序时,一切运行正常。我可以看到CompositeObject填充了所有三个表中的数据。 传递recordID和本地状态存储名称也可以很好地运行所有交互式查询。
但是当我运行同一应用程序的两个实例时,我看到带有主要和child1数据的CompositeObject,但是child2仍然为空。即使我尝试使用交互式查询对statestore进行调用,它也不会返回任何内容。
我正在使用spring-cloud-stream-kafka-streams库编写代码。
请提出未设置该设置的原因是什么,以及应该采用哪种正确的解决方案。
答案 0 :(得分:2)
Kafka Streams的缩放模型与输入主题分区的数量相关。因此,如果您的输入主题是单个分区,则无法向外扩展。输入主题分区的数量决定了您的最大并行度。
因此,您将需要创建具有更高并行度的新主题。