在使用Kafka时,有没有办法在x时间内看不到密钥后对其进行更新?
类似
records
.groupByKey
.windowedBy(
TimeWindows
.of(Duration.ofMinutes(5))
.grace(Duration.ofMinutes(1))
.advanceBy(Duration.ofMinutes(1))
).count()
.suppress(Suppressed.untilWindowCloses(BufferConfig.unbounded())
).updateNotSeen(Duration.ofMinutes(30), (k) => (k, 0))
所以在这里,只要30分钟后卡夫卡没有看到唱片,它就会发出一条新唱片。 (由假设的updateNotSeen完成。)
在搜索中,我发现了this个未解决的问题,如果可以的话,它可以让我以某种方式进行操作,但是我不知道现在该怎么做。
答案 0 :(得分:4)
据我所知,这在DSL(Java,Scala)中是不可能的。
在直接提供此类功能之前,您可以使用Kafka Streams的Processor API自己实现此类自定义功能。 (例如,处理器API可以类似地用于实现自定义联接操作。)在那种情况下,您将不使用表(仅是DSL的抽象),而是使用state stores(表由状态存储(fwiw)支持),该表支持从附加的{{ 1} s或Processor
s。处理器和转换器支持punctuation来调度周期性操作,类似于Transformer
。在这样的计划动作中,您可以检查由记录键标识的记录是否在过去30分钟内没有看到更新,然后采取相应措施。
另外,知道您可以combine the Processor API and the DSL(到目前为止您一直在使用)非常有帮助。也就是说,您可以继续将DSL用于大部分代码,并且仅在需要的位置和时间“插入”上述处理器/变压器(通过Processor API)。
希望这会有所帮助!