storm訊息容錯機制(ack-fail)
1、介紹
給每個tuple指定
id告訴
storm
系統,無論處理成功還是失敗,
spout
都要接收
tuple
樹上所有節點返回的通知。如果處理成功,
spout
的ack()
方法將會對編號是
msgid
的訊息應答確認;如果處理失敗或者超時,會呼叫
fail()
方法。2、基本實現
storm 系統中有一組叫做
"acker"
的特殊的任務,它們負責跟蹤
dag(有向無環圖)中的每個訊息。
acker任務儲存了
spout id
到一對值的對映。
第乙個值就是spout的任務
id,通過這個id,
acker
就知道訊息處理完成時該通知哪個
spout
任務。第二個值是乙個64bit的數字,我們稱之為
"ack val"
, 它是樹中所有訊息
的隨機id的異或計算結果。
ack val表示了整棵樹(tuple樹)的的狀態,無論這棵樹多大,只需要這個固定大小的數字就可以跟蹤整棵樹。當訊息被建立和被應答的時候都會有相同的訊息
id傳送過來做異或。
每當acker
發現一棵樹的ack val
值為0的時候,它就知道這棵樹已經被完全處理了。
3、可靠性配置
有三種方法可以去掉訊息的可靠性:
將引數config.topology_ackers設定為
0,通過此方法,當
spout
傳送乙個訊息的時候,它的
ack方法將立刻被呼叫;
spout傳送乙個訊息時,不指定此訊息的
messageid
。當需要關閉特定訊息可靠性的時候,可以使用此方法;
最後,如果你不在意某個訊息派生出來的子孫訊息的可靠性,則此訊息派生出來的子訊息在傳送時不要做錨定,即在emit方法中不指定輸入訊息。因為這些子孫訊息沒有被錨定在任何
tuple tree
中,因此他們的失敗不會引起任何
spout
重新傳送訊息。
Storm容錯機制
1.bolt任務crash引起的訊息未被應答。此時,acker中所有與此bolt任務關聯的訊息都會因為超時而失敗,對應的spout的fail方法將被呼叫。2.acker任務失敗。如果acker任務本身失敗了,它在失敗之前持有的所有訊息都將超時而失敗。spout的fail方法將被呼叫。3.spout任...
Storm容錯機制 Drpc kafka集群搭建
架構 nimbus 分配任務 資源排程 上傳jar包 zookeeper 協調 健康檢查 心跳 supervisor 接收nimbus任務 開啟 關閉自己管理的worker程序 可以開啟n個woker worker 執行具體處理運算元件的程序 每個worker對應執行乙個topology的子集 執行...
storm(08) storm訊息不丟失機制
通過ack機制,spout傳送出去的每一條訊息,都可以確定是被成功處理或失敗處理,從而可以讓開發者採取動作。比如在meta中,成功被處理,即可更新偏移量,當失敗時,重 送資料。因此,通過ack機制,很容易做到保證所有資料均被處理,保證訊息不丟失。另外需要注意的,當spout觸發fail動作時,不會自...