Protocol buffers 确保flink中protobuf状态对象的状态模式演化

Protocol buffers 确保flink中protobuf状态对象的状态模式演化,protocol-buffers,apache-flink,Protocol Buffers,Apache Flink,我试图找出如何为protobuf状态启用模式演化。我们的flink程序是用Scala 2.11编写的,我们使用flink 1.10.1和scalapb生成protobuf代码。RocksDB用作状态后端 我正在为包含4个双字段的protobuf消息编写一个TypeSerializer。这将是一个PoC,因此我为此选择的消息格式非常简单 弗林克的这一方面似乎没有得到充分的记录。在TypeSerializer中,除了snapshotConfiguration之外,我尽我所能实现了所有必需的方法。中途

我试图找出如何为protobuf状态启用模式演化。我们的flink程序是用Scala 2.11编写的,我们使用flink 1.10.1和scalapb生成protobuf代码。RocksDB用作状态后端

我正在为包含4个双字段的protobuf消息编写一个
TypeSerializer
。这将是一个PoC,因此我为此选择的消息格式非常简单

弗林克的这一方面似乎没有得到充分的记录。在
TypeSerializer
中,除了
snapshotConfiguration
之外,我尽我所能实现了所有必需的方法。中途我在java API文档中发现了
ProtobufSerializer
ProtobufTypeSerializer
ProtobufTypeSerializerSnapshot
类,这些类在文章中根本没有提到

现在,具体问题:

  • 如何编写
    快照配置
    方法?我在这里画了一个空白,特别是在序列化程序快照中包含哪些内容,以便能够确定序列化程序之间的兼容性(
    TypeSerializerSnapshot#resolveSchemaCompatibility
  • ProtobufSerializer和ProtobufTypeSerializer的作用是什么?我应该根据自己的需要实现它们而不是
    TypeSerializer
  • 我不确定我写的
    getLength
    是否正确。我假设4个double需要4 x 24=96字节,但protobuf消息即使在4个double的情况下也不是恒定长度
  • 如果T是不可变的,那么接受另一个T并尝试重用它的
    TypeSerializer
    方法会发生什么?在我的例子中,他们抛出了一个异常。如果
    isImmutableType=true
    ,它们是否被调用