Storm訊息容錯機制(ack fail機制)

2022-05-24 05:00:09 字數 1625 閱讀 7458

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動作時,不會自...