我有一个Kafka读数流,我检查是否超过了某个阈值。我只想在第一次超出警报时传播警报。为此,我首先计算新状态,将新状态分组到KGroupedStream中。然后减少到KTable,我检查状态是否改变(保持布尔值)并更改为更改日志流并过滤状态更改的记录。
我的理论是这应该有效,但不是每个状态更改都会传播到更改日志流,但只有一次,更改日志流似乎会更新(无法真正看到模式)。任何人都知道为什么会这样,甚至更好地解决这个问题?
简化示例:
KStream<String, String> inputStream = builder.stream("input");
KStream<String, String> outputStream = inputStream
.groupByKey()
.reduce((previousValue, newValue) -> newValue)
.toStream();
outputStream.to("output");
在这种情况下,我希望每个新的传入值都放在输出流上。但事实并非如此,只有一次将值放在输出流上。
答案 0 :(得分:2)
我猜你启用了缓存缓存(默认情况下是这样)。 尝试在Streams配置上配置以下属性。
props.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 0);