下面的代码“有效”,但我对Stores.persistentWindowStore()中传递的值的含义感到困惑。我找到了文档(https://kafka.apache.org/10/javadoc/org/apache/kafka/streams/state/Stores.html#persistentWindowStore-java.lang.String-long-int-long-boolean-),但是对我来说,参数的定义不清楚。
windowBy()值是否应始终与persistentWindowStore()中的windowSize相匹配?
保留期限应设置为什么?源主题的保留政策?
段数是多少?
保留重复项的用途是什么?文档似乎表明对联接设置为true?
long windowSize = TimeUnit.MINUTES.toMillis(15);
long retentionPeriod = windowSize*4*6 //6 hours
int numSegments = 2;
boolean retainDuplicates = false;
bdrStream.groupByKey().windowedBy(TimeWindows.of(windowSize))
.aggregate(() -> Lists.newArrayList(),
(aggKey, newValue, aggValue) -> {
BdrData d = new BdrData();
d.setCharge(newValue.getBdr().getCost());
aggValue.add(d);
return aggValue;
},
Materialized.<String, ArrayList<BdrData>>as(
Stores.persistentWindowStore("store5",
retentionPeriod,
numSegments,
windowSize,
retainDuplicates))
.withKeySerde(Serdes.String())
.withValueSerde(listBdrDataSerde))
.toStream()
.process(() -> new WindowAggregatorProcessor());
答案 0 :(得分:3)
windowBy()值是否始终与persistentWindowStore()中的windowSize相匹配?
是的
保留期限应设置为什么?源主题的保留政策?
它应与您可以通过Windows#until()
指定的窗口的保留期限匹配(默认为1天)
段数是多少?
段的数量确定粗/细粒度数据(即旧窗口)如何过期。段大小将为“保留期/(#段+ 1)”。请注意,更多的段可让您获得更细粒度的数据到期时间,但会增加开销(每个段使用它自己的RocksDB实例)
保留重复项的用途是什么?文档似乎表明对联接设置为true?
默认情况下,键必须是唯一的。如果启用保留重复项,则可以多次存储同一密钥。启用重复功能会降低性能。
注意: