1 回答

TA貢獻1796條經(jīng)驗 獲得超10個贊
Storm的解決問題的scope主要在于流計算,說流計算之前我們先簡單的說下一般數(shù)據(jù)處理系統(tǒng)的過程。一般數(shù)據(jù)處理簡單說要有幾個環(huán)節(jié):數(shù)據(jù)采集,數(shù)據(jù)計算,結(jié)果輸出。題主的問題主要是在數(shù)據(jù)采集和計算之間的對接。
一般來說計算系統(tǒng)(storm)不會自己產(chǎn)生業(yè)務數(shù)據(jù),業(yè)務數(shù)據(jù)一般來自頁面的埋點,或者對數(shù)據(jù)庫log的解析,對于storm來說采集系統(tǒng)是個外部系統(tǒng)。 采集系統(tǒng)是數(shù)據(jù)的生產(chǎn)者,流計算(storm)是數(shù)據(jù)的消費者。二者的速度并不是時時刻刻匹配的,中間就需要需要一個緩沖,這個模型下消息隊列在適合不過了。當然為什么一般用kafka,這個超出了這個問題,我們暫不討論。如果題主要處理的數(shù)據(jù)不是實時產(chǎn)生的而是靜態(tài)數(shù)據(jù)那就沒必要使用消息隊列了,當然也沒必要使用storm,使用Hadoop MR更合適。
關于spout會不會重復讀取數(shù)據(jù)的問題,簡單來說消息隊列中數(shù)據(jù)會分partition支持多并發(fā)。 題主可以看看kafka的文檔,一般消息隊列,對一份數(shù)據(jù)(一個topic,對應離線系統(tǒng)的表)會分不同的parition,不同的spout并發(fā)可以讀取不同的parition,當然一個并發(fā)可以讀取多個parition,但是多個并發(fā)讀取一個parition會引起混亂這就是題主的問題。也就是實際應用中一個parition只會有一個并發(fā)讀取。
- 1 回答
- 0 關注
- 1367 瀏覽
添加回答
舉報