我們在Streaming模式下有一個用例,我們想從管道中跟蹤BigTable上的計數器(某些#items已完成處理),我們需要增量操作。從查看https://cloud.google.com/bigtable/docs/dataflow-hbase,我發現此客戶端不支持HBase API的追加/增量操作。原因是批處理模式下的重試邏輯,但是如果Dataflow保證一次,爲什麼會支持它是一個壞主意,因爲我確定增量被稱爲只有一次?我想了解我失蹤的部分。爲什麼增量在Dataflow-BigTable連接器中不受支持?
另外,是CloudBigTableIO
可用於流式傳輸模式還是僅與批處理模式綁定?我想我們可以直接在管道中使用BigTable HBase客戶端,但連接器似乎具有很好的屬性,比如我們想要利用的Connection-pooling,因此也是問題所在。
感謝您的回覆。我正在閱讀https://cloud.google.com/dataflow/service/dataflow-service-desc#structuring-your-user-code,我只是看着_exactly-once_保證書,但卻意識到它與_idempotency_ guarantee這是DoFn的預期。因此,Dataflow實際上保證的是_atleast-once_和應用程序本身的_idempotency_有助於使它非常完美地 - once_--能夠更好地在文檔中更加明確地列出恕我直言。 –
你能解釋一下這個_atleast-once_語義如何應用於[Stateful ParDo](https://beam.apache.org/blog/2017/02/13/stateful-processing.html)。如果一個計數器在'ParDo'狀態下被維護並且一個元素被重試,它是否會導致計數器對相同元素進行兩次突變(就像任何其他副作用一樣),或者將狀態突變正確處理爲_exactly -一旦_? –
在理論上不可能提供一次執行的副作用:如果工作人員在元素上運行DoFn代碼時死亡,那麼除了再次運行代碼之外,沒有任何Beam可以做。然而,Beam模型語義只是一次,所有PCollections的內容,度量值,狀態變化等都會發生,彷彿代碼只運行一次,通常通過跑步者中的一些類似事務的機制來實現。 – jkff