2015-06-18 42 views
0

在我的架構中,DML命令排入Kafka。風暴拓撲由單個Spout和3個Solr螺栓組成。 DML命令在這3個螺栓中分配。如何處理Apache Storm拓撲中的DML操作

我的問題是如何處理命令順序被Solr Bolts混洗。爲前,命令序列是

  1. 與值50
  2. 插入記錄B具有值x插入記錄A。
  3. 更新記錄A至值20.
  4. 插入記錄C,其值爲y。
  5. 更新記錄A看重100 等

在上述情況下,如果有什麼命令5獲得通過螺栓執行命令前3得到其他博爾特執行?如果Bolt 3在Bolt 2執行命令3之前首先選擇並執行第5個命令,則可能發生這種情況。

回答

0

如果我理解你正確,你有單噴嘴(dop = 1)和一個螺栓(dop = 3 )通過洗牌分組從噴口獲取數據。如果從屬命令被混洗到不同的螺栓執行器上,則無法按正確的順序執行。

但是,如果您有一系列相互依賴的命令,則可以使用fieldsGrouping來確保所有命令都轉到相同的執行程序。對於這種情況,訂單保證被保留。爲了實現這一點,你只需要添加一個屬性到噴口輸出元組(計數器)和該屬性的字段組。此外,對於連續的相關命令,您不要修改計數器。如果一系列依賴命令完成,則將計數器增加1(這確保不同的命令序列由不同的螺栓執行器處理,即負載平衡)。棘手的部分是知道,當一系列依賴命令完成時,我猜。希望這可以幫助。