storm的一些常見模式
這篇文章列出了storm topology裡面的一些常見模式:
流聚合(stream join)
批處理(batching)
basicbolt
記憶體內快取+fields grouping組合
計算top n
用timecachemap來高效的儲存乙個最近被更新的物件的快取
分布式rpc:coordinatedbolt和keyedfairbolt
流聚合流聚合把兩個或者多個資料流聚合成乙個資料流,基於一些共同的tuple欄位。流型別的聚合型別跟具體的應用是有關了。一些應用把兩個流發出的所有的tuple都聚合起來--不管多長時間,而另一些應用則只聚合一些特定的tuple,聚合這些在storm裡面使用fields grouping就可以了,將多個流的資料輸入到乙個流上。
批處理有時候為了效能或者別的原因,你可能想把一組tuple一起處理,而不是乙個個單獨的處理。比如,你可能想批量更新資料庫。
如果你想讓你的資料處理具有可靠性,正確的方式是儲存這些tuple物件的引用,直到bolt批量處理這個tuple,一旦這個批量操作結束,你可以批量的ack這些tuple.
basicbolt
1.讀乙個輸入的tuple
2.根據這個tuple發射乙個或則多個tuple
3.在execute的方法的最後ack那個輸入的tuple
遵循這類模式的bolt一般是函式或者過濾器,這種模式太常見,storm將這類模式單獨進行了封裝,使用ibasicbolt介面
記憶體內快取+fields grouping組合
在bolt內部快取一些東西非常常見。快取在和fields grouping結合起來之後就更有用處了。比如,你有乙個bolt把短鏈變成長連線。你可以把短鏈結到長連線的對應關係利用lru演算法快取在記憶體裡面以避免重複計算。
builder.setbolt(2, new expandurl(), parallelism).shufflegrouping(1);
builder.setbolt(2, new expandurl(), parallelism).fieldsgrouping(1, new fields("url"));
第二種方式的快取會比第一種方式的快取的效率高很多,因為同樣的短鏈結始終被傳送到同乙個task。這會避免不同的機器有同樣的快取--浪費記憶體,同時也使得同樣的短網域名稱更可能在記憶體裡面找到快取。
計算top n
storm的乙個常見的持續計算的模式叫做:streaming top n
比如你有乙個bolt發射這樣的tuple["value","count"]並且你想乙個bolt基於這些資訊算出top n的tuple.最簡單的辦法是有乙個bolt可以做乙個全域性的grouping的動作並且在記憶體裡面保持這個top n.這個方式對於大資料量的流顯然是沒有擴充套件性的,因為所有的資料都會被發到同一臺機器上去,單機的處理能力始終是有限的。乙個更好的辦法是在多台機器上面平行計算這個流的每一部分的top n.然後再有乙個bolt合併這些機器上面所算出來的top n以算出最後的top n
builder.setbolt(2, new rankobjects(), parallellism).fieldsgrouping(1, new fields("value"));
builder.setbolt(3, new mergeobjects()).globalgrouping(2);
3會接受2中所有的資料去計算top n
這個模式之所以可行是因為第乙個bolt的fields grouping使得這種並行演算法在語義上是正確的
用timecachemap來高效的儲存乙個最近被更新的物件的快取
有時候你想在記憶體中儲存一些最近活躍的物件,以及讓那些不再活躍的物件自動過期。timecachemap是乙個非常高效的資料結構,它提供了一些callback函式是的我們在物件不再活躍時做一些事情。
分布式rpc:coordinatedbolt和keyedfairbolt
用storm做分布式rpc應用的時候有兩種比較常見的模式:他們被封裝在coordinatedbolt和keyedfairbolt裡面
coordinatedbolt包裝你的bolt,並且確定什麼時候你的bolt已經接收到所有的tuple.它主要使用direct stream
keyedfairbolt同樣包裝你的bolt並且保證你的topology同事處理多個drpc呼叫,而不是序列的一次只執行乙個
Storm 使用經驗與效能優化(一)
提交任務 storm jar storm starter topologies 1.0.1.jar org.apache.storm.starter.wordcounttopology word count查詢任務 storm listkill任務 storm kill word count 1 使...
Storm概念學習系列之storm的功能和三大應用
不多說,直接上乾貨!storm的功能 下面介紹storm 的三大主要應用 1 流處理 stream processing storm 可用來實時處理新資料和更新資料庫,兼具容錯性和可擴充套件性,即 storm 可以用來處理源源不斷流進來的訊息,處理之後將結果寫入某個儲存中。2 持續計算 contin...
Storm概念學習系列之storm的定時任務
不多說,直接上乾貨!至於為什麼,有storm的定時任務。這個很簡單。但是,這個在工作中非常重要!假設有如下的業務場景 這個spoult源源不斷地傳送資料,boilt呢會進行處理。然後呢,處理後的結果,假設要寫到mysql裡面。假設,spout有幾十萬條,這麼過來。寫入到bolt,意味著,它一秒鐘要呼...