我使用带有自定义TimestampExtractor的KafkaStreams聚合。 当我重新启动应用程序时,我的聚合将从头开始。
StreamsBuilder builder = new StreamsBuilder()
KStream stream = builder.stream(topic, Consumed.with(Serdes.String(), Serdes.String()))
KTable table = stream.groupByKey().windowedBy(TimeWindows.of(TimeUnit.MINUTES.toMillis(aggregationMinutes)))
.aggregate(
{ new AggregatorModel() },
{ key, value, aggregate ->
return new aggregation.add(value)
}
)
.toStream()
.map({ k, v ->
new KeyValue<>(k.window().end(), v)
})
.to('output')
def config = new Properties()
config.put(StreamsConfig.APPLICATION_ID_CONFIG, applicationId)
config.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaServerHost)
config.put(ConsumerConfig.GROUP_ID_CONFIG, 'group-id')
config.put(StreamsConfig.TIMESTAMP_EXTRACTOR_CLASS_CONFIG, CustomTimestampExtractor.class.getName())
config.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, TimeUnit.SECONDS.toMillis(60))
KafkaStreams kafkaStreams = new KafkaStreams(builder.build(), config)
kafkaStreams.start()
我做错了什么?
答案 0 :(得分:0)
我发现了问题所在。我在3天前汇总了数据,但默认设置为24h,但参数“ windowstore.changelog.additional.retention.ms”。我的聚合从头开始。当我汇总当天的数据时,一切正常。