1

我們在Streaming模式下有一個用例,我們想從管道中跟蹤BigTable上的計數器(某些#items已完成處理),我們需要增量操作。從查看https://cloud.google.com/bigtable/docs/dataflow-hbase,我發現此客戶端不支持HBase API的追加/增量操作。原因是批處理模式下的重試邏輯,但是如果Dataflow保證一次,爲什麼會支持它是一個壞主意,因爲我確定增量被稱爲只有一次?我想了解我失蹤的部分。爲什麼增量在Dataflow-BigTable連接器中不受支持?

另外,是CloudBigTableIO可用於流式傳輸模式還是僅與批處理模式綁定?我想我們可以直接在管道中使用BigTable HBase客戶端,但連接器似乎具有很好的屬性,比如我們想要利用的Connection-pooling,因此也是問題所在。

回答

1

數據流(和其他系統)提供的確切出現的方式 - 在出現故障和重試時執行一次就是要求副作用(如變異BigTable)是冪等的。 「寫」是冪等的,因爲它在重試時被覆蓋。插入可以通過包含確定性的「插入ID」來重複插入,從而使其具有冪等性。

對於增量,情況並非如此。它不被支持,因爲它在重試時不會是冪等的,所以它不會完全支持 - 一次執行。

+0

感謝您的回覆。我正在閱讀https://cloud.google.com/dataflow/service/dataflow-service-desc#structuring-your-user-code,我只是看着_exactly-once_保證書,但卻意識到它與_idempotency_ guarantee這是DoFn的預期。因此,Dataflow實際上保證的是_atleast-once_和應用程序本身的_idempotency_有助於使它非常完美地 - once_--能夠更好地在文檔中更加明確地列出恕我直言。 –

+0

你能解釋一下這個_atleast-once_語義如何應用於[Stateful ParDo](https://beam.apache.org/blog/2017/02/13/stateful-processing.html)。如果一個計數器在'ParDo'狀態下被維護並且一個元素被重試,它是否會導致計數器對相同元素進行兩次突變(就像任何其他副作用一樣),或者將狀態突變正確處理爲_exactly -一旦_? –

+0

在理論上不可能提供一次執行的副作用:如果工作人員在元素上運行DoFn代碼時死亡,那麼除了再次運行代碼之外,沒有任何Beam可以做。然而,Beam模型語義只是一次,所有PCollections的內容,度量值,狀態變化等都會發生,彷彿代碼只運行一次,通常通過跑步者中的一些類似事務的機制來實現。 – jkff

0

CloudBigTableIO可用於流模式。爲了通過Dataflow SDK支持,我們必須實現DoFn而不是Sink。

相關問題