簡體   English   中英

為什么我看不到Kafka Streams reduce方法的任何輸出?

[英]Why don't I see any output from the Kafka Streams reduce method?

給出以下代碼:

KStream<String, Custom> stream =  
    builder.stream(Serdes.String(), customSerde, "test_in");

stream
    .groupByKey(Serdes.String(), customSerde)
    .reduce(new CustomReducer(), "reduction_state")
    .print(Serdes.String(), customSerde);

我在Reducer的apply方法中有一個println語句,當我希望減少時會成功打印出來。 但是,上面顯示的最終打印語句不顯示任何內容。 同樣,如果我使用to的方法,而不是print ,我看到了目標主題中沒有消息。

在reduce語句之后我需要什么才能看到減少的結果? 如果一個值被推送到輸入,我不希望看到任何東西。 如果按下具有相同鍵的第二個值,我希望減速器應用(它確實如此),並且我還期望減少的結果繼續到處理管道中的下一步。 如上所述,我在管道的后續步驟中沒有看到任何內容,我不明白為什么。

從Kafka 0.10.1.0所有聚合運算符都使用內部重復數據刪除緩存來減少結果KTable changelog流的負載。 例如,如果您使用相同的密鑰直接計數和處理兩個記錄,則完整的更改日志流將為<key:1>, <key:2>

使用新的緩存功能,緩存將接收<key:1>並存儲它,但不會立即將其發送到下游。 當計算<key:2> ,它將替換緩存的第一個條目。 根據緩存大小,不同密鑰數,吞吐量和提交間隔,緩存會向下游發送條目。 這發生在單個密鑰條目的緩存逐出或緩存的完全刷新(向下游發送所有條目)。 因此,KTable更改日志可能只顯示<key:2> (因為<key:1>重復刪除)。

您可以通過Streams配置參數StreamConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG來控制緩存的大小。 如果將值設置為零,則完全禁用緩存,KTable更改日志將包含所有更新(有效地提供0.10.1.0行為)。

匯編文檔包含更詳細地解釋緩存的部分:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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