2015-12-03 23 views
0

按照我的理解ackfailnextTuple功能都是使用緊密循環作爲ISpout的Javadoc同一線程調用提示:阿帕奇風暴:限制所產生的元組數(在一定的時間框架)

nextTuple ,ack和失敗都會在噴口任務中的單個 線程中緊密循環中調用。

假設我們有一個合成的元組生成器,並且我們想限制每秒噴出的元組數。這怎麼能實現?睡覺()是個好主意嗎?有其他方法嗎?

回答

2

睡眠可能不是最好的主意,因爲它會阻止噴嘴處理傳入的數據。看到這裏:Why should I not loop or block in Spout.nextTuple()

我只是計數發射的元組,並記住一個時間戳。如果每個時間單位的元組數量超過了,並且時間單位沒有通過,只需從nextTuple()返回而不發射任何元組。當時間單位通過時,將計數器重置爲零,按時間單位推進時間戳,然後重新開始發射。第四。

+0

是的,這是我認爲這不是一個好主意睡覺。感謝您的建議:) –

+1

只是擴展我的答案。 –