Google cloud dataflow 为什么Dataflow BigTable连接器中不支持增量?

Google cloud dataflow 为什么Dataflow BigTable连接器中不支持增量?,google-cloud-dataflow,google-cloud-bigtable,apache-beam,apache-beam-io,Google Cloud Dataflow,Google Cloud Bigtable,Apache Beam,Apache Beam Io,我们在流模式中有一个用例,我们希望从管道(一些#项已完成处理)跟踪BigTable上的计数器,我们需要增量操作。通过查看,我发现该客户端不支持HBase API的追加/增量操作。说明的原因是批处理模式下的重试逻辑,但是如果数据流保证只调用一次,为什么支持它是一个坏主意,因为我确信增量只调用了一次?我想知道我遗漏了什么 另外,CloudBigTableIO是否可以在流模式下使用,还是仅绑定到批处理模式?我想我们可以直接在管道中使用BigTable HBase客户机,但是连接器似乎有一些很好的特性,

我们在流模式中有一个用例,我们希望从管道(一些#项已完成处理)跟踪BigTable上的计数器,我们需要增量操作。通过查看,我发现该客户端不支持HBase API的追加/增量操作。说明的原因是批处理模式下的重试逻辑,但是如果数据流保证只调用一次,为什么支持它是一个坏主意,因为我确信增量只调用了一次?我想知道我遗漏了什么

另外,
CloudBigTableIO
是否可以在流模式下使用,还是仅绑定到批处理模式?我想我们可以直接在管道中使用BigTable HBase客户机,但是连接器似乎有一些很好的特性,比如我们希望利用的连接池,这就是问题所在。

数据流(和其他系统)的方式通过要求副作用(如改变BigTable)是幂等的,提供了在出现故障和重试时执行一次的外观。“写入”是幂等的,因为它在重试时被覆盖。插入可以通过包含一个确定性的“插入ID”来实现幂等,该ID用于消除插入的重复

对于增量,情况并非如此。它不受支持,因为它在重试时不是幂等的,所以它不支持一次执行。

数据流(和其他系统)在出现故障和重试时提供一次执行的外观的方式是要求副作用(如改变BigTable)是幂等的。“写入”是幂等的,因为它在重试时被覆盖。插入可以通过包含一个确定性的“插入ID”来实现幂等,该ID用于消除插入的重复


对于增量,情况并非如此。不支持它,因为重试时它不是幂等的,所以它不支持一次执行。

CloudBigTableIO在流模式下可用。为了通过Dataflow SDK支持这一点,我们必须实现一个DoFn而不是一个接收器。

CloudBigTableIO在流模式下可用。为了通过Dataflow SDK支持这一点,我们必须实现一个DoFn而不是一个接收器。

感谢您的回复。我正在阅读,我只看了一次保证,但迪恩没有意识到它与预期的DoFn的幂等性保证是联系在一起的。因此,数据流实际上保证的是至少一次,而应用程序本身的幂等性有助于使其精确到一次——最好在文档IMHO中更加明确。请您解释一下这种至少一次的语义是如何应用于。如果计数器保持在
ParDo
状态,并在其中重试某个元素,是否会导致同一元素的计数器发生两次突变(与任何其他副作用一样)或者状态突变被正确地处理为精确一次?理论上不可能提供精确一次的副作用执行:如果一个工人在一个元素上运行DoFn代码时死亡,Beam除了再次运行代码外,别无选择。然而,Beam模型语义是完全一次的,因为所有PCollection的内容、度量值、状态变化等都会发生,就像代码只运行一次一样,通常通过运行程序中的一些类似事务的机制来实现。例如,如果工作程序在处理元素时死亡,然后重试并成功处理元素,计算成功处理的PCollection输出、度量更改和状态突变等,并丢弃失败尝试的结果,给人的印象是这个元素只被处理过一次。我对混合副作用和我现在清楚的实际管道数据感到有点困惑。所以任何内部状态都是事务性的,但任何外部状态都没有这样的保证,所有这样的外部突变(GCS/BigTable)都需要是幂等的。但例如,如果
CloudBigTableIO
确实在流模式下工作,为什么它仍然不能支持增量操作,因为它们仍然可以事务性地执行,并且任何失败都可以通过执行其反向操作来逆转?我知道这可能超出了范围,但我正在努力理解这样一个API的可行性。谢谢您的回复。我正在阅读,我只看了一次保证,但迪恩没有意识到它与预期的DoFn的幂等性保证是联系在一起的。因此,数据流实际上保证的是至少一次,而应用程序本身的幂等性有助于使其精确到一次——最好在文档IMHO中更加明确。请您解释一下这种至少一次的语义是如何应用于。如果计数器保持在
ParDo
状态,并在其中重试某个元素,是否会导致同一元素的计数器发生两次突变(与任何其他副作用一样)或者状态突变被正确地处理为精确一次?理论上不可能提供精确一次的副作用执行:如果一个工人在一个元素上运行DoFn代码时死亡,Beam除了再次运行代码外,别无选择。然而,Beam模型语义是完全一次的,因为所有PCollection的内容、度量值、状态变化等都会发生,就像代码只运行一次一样,通常通过运行程序中的一些类似事务的机制来实现。例如,如果工作程序在处理元素时死亡,然后重试并成功处理元素,计算成功处理的PCollection输出、度量更改和状态突变等,并丢弃失败尝试的结果,给人的印象是这个元素只被处理过一次。我对混合副作用和我现在清楚的实际管道数据感到有点困惑。因此,任何内部状态都是事务性的,但任何外部状态都是事务性的