重新启动应用程序后,Spring Kafka重置聚合

时间:2018-10-23 15:23:02

标签: spring spring-boot groovy apache-kafka apache-kafka-streams

我使用带有自定义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()

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我发现了问题所在。我在3天前汇总了数据,但默认设置为24h,但参数“ windowstore.changelog.additional.retention.ms”。我的聚合从头开始。当我汇总当天的数据时,一切正常。