Java 卡夫卡仅提交KGroupedTable的最新消息

Java 卡夫卡仅提交KGroupedTable的最新消息,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,我得到了卡夫卡流应用程序,如下所示: static KafkaStreams build(AppConfig appConfig, SerdesHelper serdes) { final KStreamBuilder builder = new KStreamBuilder(); builder .table(serdes.sourceKeySerde, serdes.sourceValueSerde, appConfig.sourceTopic) .grou

我得到了卡夫卡流应用程序,如下所示:

static KafkaStreams build(AppConfig appConfig, SerdesHelper serdes) {
  final KStreamBuilder builder = new KStreamBuilder();

  builder
      .table(serdes.sourceKeySerde, serdes.sourceValueSerde, appConfig.sourceTopic)
      .groupBy(StreamBuilder::groupByMapper, serdes.intSerde, serdes.longSerde)
      .aggregate(
          StreamBuilder::initialize,
          StreamBuilder::add,
          StreamBuilder::subtract,
          serdes.sinkValueSerde)
      .to(serdes.intSerde, serdes.sinkValueSerde, appConfig.sinkTopic);

  return new KafkaStreams(builder, appConfig.streamConfig);
}
我的具体例子如下

((k, v)) -> ((k), v[])
在使用只有两个唯一键的3000.000条消息的虚拟数据运行时,我在不到一分钟的时间内在
sinkTopic
中得到了大约10000条消息,我希望得到4/6(基于我成功停止应用程序的那一刻)


如何确保只有具有最新分组值的密钥才会提交回Kafka,而不是每个中间消息?

这是流处理,而不是批处理。没有“最新分组值”——输入是无限的,因此输出是无限的

您只能通过以下方式减少中间体的数量:

  • 增加KTable缓存大小(但对于您的情况来说,这似乎不是问题,因为您只有2个唯一的密钥,因此如果您没有禁用缓存或
  • 增加提交间隔

  • 我所说的最新分组值是指刷新间隔之间该键的最新值。我将尝试增加提交间隔。