我是Kafka Streams的新手。
我使用KTable的抑制方法来仅处理这样的窗口的最终结果:
myStream
.windowedBy(TimeWindows.of(Duration.ofSeconds(10)).grace(Duration.ofMillis(500)))
.aggregate(new Aggregation(),
(k, v, a) -> a, // Disabled the actual aggregation in order to eliminate possiblities of latency
materialized.withLoggingDisabled())
.suppress(untilWindowCloses(Suppressed.BufferConfig.unbounded()))
.toStream().peek((k, v) -> log.info("delay " + (System.currentTimeMillis() - k.window().endTime().toEpochMilli())));
这样,我会得到一个日志,该日志每10秒会有一次延迟,其中包括窗口结束与调用窥视的实际时间之间的差异。 我会在这里说明一个很小的数字,因为这段代码实际上什么也没做...
尽管如此,每个键/窗口的延迟时间为4-20秒。
我为每个任务使用一个线程(本主题为5个线程)。
有人可以指出我是否做错了什么?
谢谢!
编辑:
使用VirtualVM显示,在sun.nio.ch.SelectorImpl.select()上消耗了约99%的时间。这意味着AFAIU,该过程大部分时间都是“闲置”。
编辑:
似乎更改“ commit.interval.ms”(默认为30000)可以大大减少延迟。
静态延迟在15秒内达到峰值,因此问题尚未解决...