Newbie here, I am working with Kafka Streams with java 1.8.
I want to use the ktable as a lookup table in a join to a kstream. I had no
issue implementing this. However, I do not want the ktable to grow without
bounds, I want to limit the ktable to the past 2 weeks data, more of a
'sliding' window ktable. At any given time I need at least 2 weeks data in my
ktable, so I don’t think solution like tumbling table will work since it starts
over every time it hops.
A little simplified example. . .
KStream<String, GenericRecord> txnStream =
builder.stream("TXN_DATA");
KStream<String, GenericRecord> txnStreamFull = txnStream
.map((key, record) -> {
return new KeyValue<>(record.get("TXN").toString(), record);
})
.through("RekeyedIntermediateTopic1")
;
KTable<String,Long> countTableStream = txnStream // do not
want this table to grow indefinitely.
.map((key, record) -> {
return new KeyValue<>(record.get("TXN").toString(),
record);
})
.through("RekeyedIntermediateTopic2")
.countByKey(stringSerdeKey, "DupCountKTable10");
KStream<String, GenericRecord> duplicatesStream =
txnStreamFull.leftJoin(countTableStream,
(vTxnStream,vCountTableStream) -> {
vTxnStream.put("count",
Long.toString(vCountTableStream.longValue()));
return vTxnStream;});
duplicatesStream.to("DUP_TXNS");
I thought perhaps can schedule ktable.foreach to inspect and clean, but not
sure keys can be removed this way.
I may be missing a basic concept here. I have spent some time searching but
not finding good answer, thanks for any tips.
Thanks,
John