[英]Is Kafka Stream really Real Time?
我正在使用Kafka Stream API來測試某些功能。 我有一個像這樣的流:
KStream<String, UnifiedData> stream = builder.stream("topic", Consumed.with(Serdes.String(), new JsonSerde<>(Data.class)));
stream.groupBy((key, value) -> value.getMetadata().getId())
.windowedBy(TimeWindows.of(TimeUnit.SECONDS.toMillis(1000)))
.count()
.toStream()
.map((key, value) -> {
System.out.println(value);
return KeyValue.pair(key.toString(), value);
});
我發現2種奇怪的行為會在我的主題中產生一些數據:
20
的輸出,而不是像1 2 3....
System.out.println(value)
在控制台中打印結果的時間之間大約有20秒的延遲 那么,您認為這種行為是完全正常的嗎? 還是我的kafka可能有配置問題?
我正在使用Kafka 1.0.1,Kafka Stream 1.0.1,Java 8和Spring-Boot
默認情況下,Kafka Streams使用緩存對聚合中的連續輸出“去重復”以減少下游負載。
您可以通過在KafkaStreams
配置中設置cache.max.bytes.buffering=0
來全局禁用緩存。 另外,也可以通過將Materialized
參數傳入聚合運算符來分別禁用每個存儲的緩存。
此外,所有高速緩存在提交時都會刷新,默認的提交間隔是30秒。 因此,您有理由在30秒后看到輸出。 如果禁用緩存,則提交間隔將不再對行為產生任何影響。
有關更多詳細信息,請參見: https : //kafka.apache.org/documentation/streams/developer-guide/memory-mgmt.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.