更新Protobuf无法通过Google Dataflow中的兼容性检查

时间:2018-11-27 14:32:55

标签: google-cloud-dataflow apache-beam

我目前正在尝试更新有状态的流作业,该作业基本上如下所示(使用2.7 / 2.8版本的sdks):

pipeline
    .apply("Read from pubsub", ...read from pubsub...)
    .apply(
        "Map PubSubMessages",
        MapElements
            .into(TypeDescriptors.kvs(TypeDescriptors.strings(), TypeDescriptor.of(PubSubMessage.class)))
            .via(input -> KV.of(input.getId1() + ":" + input.getId2(), input))
    )
    .apply(...stateful processing...)

PubSubMessage使用自动生成的类进行解码/编码:

registry.registerCoderForClass(PubSubMessage.class, ProtoCoder.of(PubSubMessage.class));

我现在遇到的问题是消息已更新。 PubSubMessage现在有两个附加字段。由于它是proto3,所以向后兼容。但是,由于生成的类已更改,因此Dataflow似乎认为类型也已更改,并且旧消息/步骤不再兼容,并且无法使用以下内容更新作业:

  

工作流程失败。原因:新作业与现有作业不兼容。原始作业尚未中止。,步骤Map PubSubMessages到状态object / Map.out0 / FromValue的编码器或类型已更改。

停止工作(耗尽其消息)并重新启动它会有些痛苦。在这种情况下,有没有更好的方法来更新类型/ protobuf /编码器?

谢谢!

0 个答案:

没有答案