Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 如何优化聚合,以便首先完成每个消费者的聚合?_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Apache kafka 如何优化聚合,以便首先完成每个消费者的聚合?

Apache kafka 如何优化聚合,以便首先完成每个消费者的聚合?,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我有一个名为input的卡夫卡主题,有多个分区 假设一条消息如下所示: { "key": 123456, "otherKey": 444, ... } input.groupBy((k, v) -> v.getOtherKey()) .windowedBy(TimeWindows.of(Duration.of(60, SECONDS))) .count() .suppress(untilWindowCloses(Suppress

我有一个名为
input
的卡夫卡主题,有多个分区

假设一条消息如下所示:

{
    "key": 123456, 
    "otherKey": 444, 
    ... 
}
input.groupBy((k, v) -> v.getOtherKey())
     .windowedBy(TimeWindows.of(Duration.of(60, SECONDS)))
     .count()
     .suppress(untilWindowCloses(Suppressed.BufferConfig.unbounded()))
     .toStream()
     .to("output");
记录按“键”进行分区(因此同一个键将始终由同一个卡夫卡消费者进行处理)

现在我想计算每分钟每个“otherKey”的事件数。据我所知,使用如下
KStreams
可以很容易地做到这一点:

{
    "key": 123456, 
    "otherKey": 444, 
    ... 
}
input.groupBy((k, v) -> v.getOtherKey())
     .windowedBy(TimeWindows.of(Duration.of(60, SECONDS)))
     .count()
     .suppress(untilWindowCloses(Suppressed.BufferConfig.unbounded()))
     .toStream()
     .to("output");
使用
groupBy
,Kafka Streams将数据重新分区到内部Kafka主题,在
input
主题中,每个事件对应一个事件

这对我来说似乎是浪费。它可以按“otherKey”统计每个kafka使用者(仅计算使用者的分区)中的消息,并按“otherKey”每分钟只发布一次到内部主题


有没有办法使用Kafka Streams做到这一点?

您对行为的观察是正确的,您优化执行的想法也是正确的

但是,目前尚未实施此优化。原因是,
suppress()
是一个全新的操作符,在引入
suppress()
之前,您描述的优化没有意义

如果您真的想进行这种优化,那么可以使用处理器API构建它