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,而不是每个中间消息?这是流处理,而不是批处理。没有“最新分组值”——输入是无限的,因此输出是无限的 您只能通过以下方式减少中间体的数量:
我所说的最新分组值是指刷新间隔之间该键的最新值。我将尝试增加提交间隔。