我正在用kafka连接KT-KT外键表。
我只想在一定条件下加入。 为此,我在连接表之前添加了一个过滤器。 它的基本意思是,仅当左表的ID /键大于X时才进行连接。
当我从filter = 0开始并将数据放入主题/表中时,它工作得很好。 它会执行所有数据的连接,并由左表或右表的更新触发。
当我将过滤器增加到2,则仅对左侧表的ID> 2进行连接。 到目前为止,一切正常。
当我有意外的事情发生
有人可以解释为什么会发生这种情况以及我可以采取哪些措施来解决此问题? 就我的理解而言,联接应始终占据完整的2个表。 先前的联接(使用过滤器以排除某些数据)和数据的插入/更新的影响应为零。 但是不知何故...
code:
// build right KTable
final KTable<String, CMDB> cmdbKTable = builder.table(
this.getCmdbTopic(),
Consumed.with(Serdes.String(), cmdbSerde));
// build left Ktable
final KTable<String, ServerData> sdKTable = builder.table(
this.getServerDataTopic(),
Consumed.with(Serdes.String(), serverDataSerde));
final ServerEnrichedJoiner serverEnrichedJoiner = new ServerEnrichedJoiner();
// join based on left ServerData::getServerName = right key (servername)
final KTable<String, ServerEnriched> joinedKTable =
sdKTable
.filter((k,v) ->
{
System.out.println("k:" + k + ", v.getTime:" + v.getTime());
return Integer.parseInt(v.getTime())> this.getJoinTimeFilter();
})
.leftJoin(cmdbKTable, ServerData::getServerName, serverEnrichedJoiner);
joinedKTable.toStream().to(this.getOutputTopic(), Produced.with(Serdes.String(),serverEnrichedSerde));