当抑制窗口式KTable的输出时,如何正确实现缓冲区配置?

时间:2019-09-09 19:25:44

标签: java apache-kafka apache-kafka-streams

我有一个窗口KTable可以正常工作,但是每次接收到新值时都会输出。我找到了.suppress运算符,它完全符合我的要求:仅在时间窗口结束时输出结果。我在grace中添加了TimeWindow值,但是无法让.suppress与窗口化的KTable一起使用。 The answer to this question shows what .suppress should look like.

当我阅读Apache's documentation时,似乎发现untilWindowCloses是Suppressed接口的一种方法,这意味着我无法实例化Suppressed对象,对吗?我不确定如何以这种方式实现接口(在窗口.suppress上的KTable的参数中)。

我觉得我想念一些愚蠢的东西,但是我一直在搜寻,无法找到答案。有什么想法吗?

TimeWindows window = TimeWindows.of(Duration.ofMinutes(1)).grace(Duration.ofSeconds(10));

final KTable<Windowed<String>, GenericRecord> joinedKTable = groupedStream
    .windowedBy(window)
    .reduce(new Reducer<GenericRecord>() {
        @Override
        public GenericRecord apply(GenericRecord aggValue, GenericRecord newValue) {
            //reduce code
        }
    })
    .suppress(Suppressed.untilWindowCloses(unbounded())); //need help here

我正在使用Eclipse,它告诉我"The method unbounded() is undefined."我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您需要静态导入unbounded()或对引用进行限定。

def start(update,context):
update.message.reply_text("some text")

import static org.apache.kafka.streams.kstream.Suppressed.BufferConfig.unbounded;