Kafka:在x时间内没有更新时更新密钥

时间:2019-10-23 19:11:19

标签: scala apache-kafka apache-kafka-streams

在使用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个未解决的问题,如果可以的话,它可以让我以某种方式进行操作,但是我不知道现在该怎么做。

1 个答案:

答案 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)。

希望这会有所帮助!