![](/img/trans.png)
[英]Why don't I see any main method in this Java dynamic web project?
[英]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.