Kafka Stream API:KStream到KGroupedStream到KTable到KStream

时间:2017-08-10 11:07:56

标签: apache-kafka-streams

我有一个Kafka读数流,我检查是否超过了某个阈值。我只想在第一次超出警报时传播警报。为此,我首先计算新状态,将新状态分组到KGroupedStream中。然后减少到KTable,我检查状态是否改变(保持布尔值)并更改为更改日志流并过滤状态更改的记录。

我的理论是这应该有效,但不是每个状态更改都会传播到更改日志流,但只有一次,更改日志流似乎会更新(无法真正看到模式)。任何人都知道为什么会这样,甚至更好地解决这个问题?

简化示例:

KStream<String, String> inputStream = builder.stream("input");
KStream<String, String> outputStream = inputStream
  .groupByKey()
  .reduce((previousValue, newValue) -> newValue)
  .toStream();
outputStream.to("output");

在这种情况下,我希望每个新的传入值都放在输出流上。但事实并非如此,只有一次将值放在输出流上。

1 个答案:

答案 0 :(得分:2)

我猜你启用了缓存缓存(默认情况下是这样)。 尝试在Streams配置上配置以下属性。

props.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 0);