storm使用redis池與長鏈結的區別

2021-07-11 00:19:44 字數 776 閱讀 3984

storm的bolt中使用redis有兩種方式,1)在prepare中初始化jedis鏈結,在execute方法中,執行提交方法。 2)在prepare中初始化連線池,每次execute中從池中取jedis,然後再提交資料,然後歸還連線。

用池好處:萬一發生了連線異常,catch捕獲調fail,下一條資料執行execute照常進行,從池裡取連線不會受影響。另外乙個好處,就是如果乙個excutetor對應多個task,可以在executor裡邊建立資料連線池,每個task都從這個池裡取連線,避免同時建立多個連線比較慢。

壞處:初始化池的時候比較耗時,也就是在bolt啟動初期容易發生fail情況。

不用池好處: 連線分兩種,一種全域性的,一種每次使用之前建立連線,用完關閉。如果不用池的話,肯定會選擇第一種,全域性連線,就建立一次。這樣的好處是初始化的連線快。後續每次也不用再重複取,關閉。

壞處:一旦發生連線超時或者其他的異常,連線中斷了。。如果不捕獲,worker就會因為異常自動重啟,在重啟期間fail的資料會很多。如果捕獲了異常,因為在prepare中建的長連線,在下一條資料進來的時候已經不能使用,是broken pipe,必須得在finally中重建jedis,因為建立連線的時候不會判斷異常,只有在資料提交的方法中才會有異常判斷,所以在finally中可以執行重建連線,不會陷入再次異常的死迴圈。如果連線恢復了,就會用上一條finally裡邊新建的連線進行提交操作。 注意,一定要在finally裡重建。

這樣的壞處是,每乙個catch,都要在finally中重建一下連線,如果連線持續異常,finally會建立多次連線。而之後恢復之前的那條連線被用到。

storm的學習與使用 四

storm的一些常見模式 這篇文章列出了storm topology裡面的一些常見模式 流聚合 stream join 批處理 batching basicbolt 記憶體內快取 fields grouping組合 計算top n 用timecachemap來高效的儲存乙個最近被更新的物件的快取 分...

Storm 使用經驗與效能優化(一)

提交任務 storm jar storm starter topologies 1.0.1.jar org.apache.storm.starter.wordcounttopology word count查詢任務 storm listkill任務 storm kill word count 1 使...

關於Redis使用連線池介紹

jedis連線池 jedis為了防止使用連線物件jedis時頻繁的建立和銷毀,造成資源的浪費,提供了乙個jedis連線池,這個連線池是jedis最底層的連線池,其他的redis結構對應jedis物件,底層都會封裝這個jedis連線池.可以從連線池中獲取jedis物件,使用完畢後歸還這個鏈結物件 1....