簡體   English   中英

Kafka Stream真的是實時的嗎?

[英]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條消息,我只會得到一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM