我们在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