Java 在禁止窗口KTable的输出时,如何正确实现缓冲区配置?
我有一个窗口化的Java 在禁止窗口KTable的输出时,如何正确实现缓冲区配置?,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,我有一个窗口化的KTable按预期工作,但每次收到新值时它都会输出。我找到了.suppress操作符,它完全符合我的要求:只在时间窗口结束时输出结果。我已将grace值添加到我的TimeWindow,但无法获取.suppress以使用带窗口的KTable 在阅读时,我觉得untilwindowclose是抑制接口的一种方法,这意味着我不能实例化supprested对象,对吗?我不知道如何以这种方式实现接口(在带窗口的KTable上的.suppress参数中) 我觉得我错过了一些愚蠢的事情,但我已
KTable
按预期工作,但每次收到新值时它都会输出。我找到了.suppress
操作符,它完全符合我的要求:只在时间窗口结束时输出结果。我已将grace
值添加到我的TimeWindow
,但无法获取.suppress
以使用带窗口的KTable
在阅读时,我觉得untilwindowclose
是抑制接口的一种方法,这意味着我不能实例化supprested
对象,对吗?我不知道如何以这种方式实现接口(在带窗口的KTable
上的.suppress
参数中)
我觉得我错过了一些愚蠢的事情,但我已经找了又找,找不出答案。有什么想法吗
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
TimeWindows window=TimeWindows.of(持续时间分钟(1)).grace(持续时间秒(10));
final KTable joinedKTable=groupedStream
.windowedBy(窗口)
.减速器(新减速器(){
@凌驾
公共GenericRecord apply(GenericRecord aggValue、GenericRecord newValue){
//减少代码
}
})
.suppress(Suppressed.untilwindowclose(unbounded())//这里需要帮助吗
我正在使用Eclipse,它告诉我“方法unbounded()未定义。”我做错了什么?您需要静态导入或限定引用
import static org.apache.kafka.streams.kstream.Suppressed.BufferConfig.unbounded;
或
您需要静态导入或限定引用
import static org.apache.kafka.streams.kstream.Suppressed.BufferConfig.unbounded;
或
谢谢你的回复。我尝试了第二种方法,得到
对接口静态方法的引用只允许在源代码级别1.8或更高级别上使用。我查了一下,上面说你需要JDK 8。当我执行java-version
时,我得到了openjdk版本“1.8.0_191”
。您需要在Eclipse中找到适当设置源代码级别的选项。我已经有几年没有使用Eclipse了,但是它可以在IntelliJ的项目结构下使用。谢谢你的帮助。我想我在项目>属性>Java编译器>编译器遵从性级别下找到了它。如果我只是从命令行运行它,它会使用我安装的JDK吗?谢谢你的回复。我尝试了第二种方法,得到对接口静态方法的引用只允许在源代码级别1.8或更高级别上使用。我查了一下,上面说你需要JDK 8。当我执行java-version
时,我得到了openjdk版本“1.8.0_191”
。您需要在Eclipse中找到适当设置源代码级别的选项。我已经有几年没有使用Eclipse了,但是它可以在IntelliJ的项目结构下使用。谢谢你的帮助。我想我在项目>属性>Java编译器>编译器遵从性级别下找到了它。如果我只是从命令行运行它,它会使用我安装的任何JDK吗?请注意,2.1.x和2.2.x中的suppress()
中存在错误,如果使用suppress()
,您应该使用2.3.0
。您能解释一下这些是什么吗?我正在5.1.2版上使用Confluent的平台。不确定对应于哪个版本的KStreams。这是AK2.1.1——您应该使用CP5.3.0。(cf)请注意,2.1.x和2.2.x中的suppress()
中存在缺陷,如果使用suppress()
,您应该使用2.3.0
。您能解释一下这些缺陷是什么吗?我正在5.1.2版上使用Confluent的平台。不确定对应于哪个版本的KStreams。这是AK2.1.1——您应该使用CP5.3.0。(比照)