I was under the assumption that this should work but ProtoCoder keeps a reference of the class used to serialize. That causes the snapshot to break.
We can fix this by: a) writing/using coders which do not keep instances of evolving classes b) adding an interface to Beam for Coder serialization/deserialization c) adding a mode to Flink which allows to use newly supplied coders instead of having to load the old coder >From all the options (a) is the most feasible for you. It looks like neither ProtoCoder nor AvroCoder fall into this category. -Max On 04.06.20 16:22, Ivan San Jose wrote: > I've changed my Java model in order to use ProtoCoder (with > @DefaultCoder(ProtoCoder.class)), but I'm getting same error when > tryingto restore the last taken checkpoint after adding an attribute to > that model. > > What do you think it could happen? It seems that state saved within the > checkpoint is still using Java serialization mechanism... > > On Thu, 2020-06-04 at 13:05 +0000, Ivan San Jose wrote: >> Thanks Max for your response. I'd try with AvroCoder then. But I >> still >> have a question, I guess AvroCoder is generating the AVRO schema >> using >> Java reflection, and then that generated schema is saved within the >> Flink checkpoint, right? >> >> On Wed, 2020-06-03 at 18:00 +0200, Maximilian Michels wrote: >>> Hi Ivan, >>> >>> Moving to the new type serializer snapshot interface is not going >>> to >>> solve this problem because we cannot version the coder through the >>> Beam >>> coder interface. That is only possible through Flink. However, it >>> is >>> usually not trivial. >>> >>> In Beam, when you evolve your data model, the only way you can >>> maintain >>> compatible is to use a serialization format which can evolve, e.g. >>> KafkaIO or Protobuf. >>> >>> Cheers, >>> Max >>> >>> On 03.06.20 16:47, Ivan San Jose wrote: >>>> Hi, we have a Beam application running with Flink runner and we >>>> are >>>> struggling using Flink checkpoints. Everytime we evolve the >>>> source >>>> code >>>> modifying a Java model, an exception is thrown when trying to >>>> restore >>>> last checkpoint taken: >>>> >>>> Caused by: java.lang.IllegalStateException: Could not Java- >>>> deserialize >>>> TypeSerializer while restoring checkpoint metadata for serializer >>>> snapshot >>>> 'org.apache.beam.runners.flink.translation.types.CoderTypeSeriali >>>> ze >>>> r$Le >>>> gacySnapshot'. Please update to the TypeSerializerSnapshot >>>> interface >>>> that removes Java Serialization to avoid this problem in the >>>> future. >>>> at >>>> org.apache.flink.api.common.typeutils.TypeSerializerConfigSnapsho >>>> t. >>>> rest >>>> oreSerializer(TypeSerializerConfigSnapshot.java:138) >>>> at >>>> org.apache.flink.runtime.state.StateSerializerProvider.previousSc >>>> he >>>> maSe >>>> rializer(StateSerializerProvider.java:189) >>>> at >>>> org.apache.flink.runtime.state.StateSerializerProvider.currentSch >>>> em >>>> aSer >>>> ializer(StateSerializerProvider.java:164) >>>> at >>>> org.apache.flink.runtime.state.RegisteredOperatorStateBackendMeta >>>> In >>>> fo.g >>>> etPartitionStateSerializer(RegisteredOperatorStateBackendMetaInfo >>>> .j >>>> ava: >>>> 113) >>>> at >>>> org.apache.flink.runtime.state.OperatorStateRestoreOperation.rest >>>> or >>>> e(Op >>>> eratorStateRestoreOperation.java:94) >>>> at >>>> org.apache.flink.runtime.state.DefaultOperatorStateBackendBuilder >>>> .b >>>> uild >>>> (DefaultOperatorStateBackendBuilder.java:83) >>>> ... 12 more >>>> Caused by: java.io.InvalidClassException: >>>> internal.model.dimension.Dimension; local class incompatible: >>>> stream >>>> classdesc serialVersionUID = -223148029368332375, local class >>>> serialVersionUID = 4489864664852536553 >>>> >>>> As you can see the exception is complaining about class was >>>> evolved >>>> and >>>> they are not compatible any more. >>>> >>>> After checking some documentation and Beam source code... >>>> https://flink.apache.org/ecosystem/2020/02/22/apache-beam-how-beam-runs-on-top-of-flink.html >>>> (Serializers >>>> vs >>>> Coders) >>>> https://github.com/apache/beam/blob/785609f22d013411b7973bbf9e2d15c3c8171fb2/runners/flink/1.8/src/main/java/org/apache/beam/runners/flink/translation/types/CoderTypeSerializer.java >>>> >>>> It seems that Beam coders are wrapped into Flink's >>>> TypeSerializers, >>>> and, at the end, Beam coders are the ones in charge of >>>> serialize/deserialize objects. >>>> >>>> Also reading >>>> https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/stream/state/custom_serialization.html#migrating-from-deprecated-serializer-snapshot-apis-before-flink-17 >>>> , and seeing CoderTyperSerializer implementation it seems Beam is >>>> implementing a deprecated interface and should be moved to new >>>> TypeSerializerSnapshot one. To be honest I don't know if that >>>> would >>>> solve my problem, but the exception is clearly saying "Please >>>> update to >>>> the TypeSerializerSnapshot interface that removes Java >>>> Serialization to >>>> avoid this problem in the future.", so I gues would solve it. >>>> >>>> Can someone help me here? I could try to update the >>>> implementation >>>> if >>>> someone give me some hints, because right now I'm a little bit >>>> lost. >>>> >>>> Thanks >>>> >>>> >>>> Este correo electrónico y sus adjuntos son de naturaleza >>>> confidencial. A no ser que usted sea el destinatario, no puede >>>> utilizar, copiar o desvelar tanto el mensaje como cualquier >>>> información contenida en el mensaje. Si no es el destinatario, >>>> debe >>>> borrar este correo y notificar al remitente inmediatamente. >>>> Cualquier punto de vista u opinión expresada en este correo >>>> electrónico son únicamente del remitente, a no ser que se indique >>>> lo contrario. Todos los derechos de autor en cualquier material >>>> de >>>> este correo son reservados. Todos los correos electrónicos, >>>> salientes o entrantes, pueden ser grabados y monitorizados para >>>> uso >>>> legítimo del negocio. Nos encontramos exentos de toda >>>> responsabilidad ante cualquier perdida o daño que surja o resulte >>>> de la recepción, uso o transmisión de este correo electrónico >>>> hasta >>>> el máximo permitido por la ley. >>>> >>>> This email and any attachment to it are confidential. Unless you >>>> are the intended recipient, you may not use, copy or disclose >>>> either the message or any information contained in the message. >>>> If >>>> you are not the intended recipient, you should delete this email >>>> and notify the sender immediately. Any views or opinions >>>> expressed >>>> in this email are those of the sender only, unless otherwise >>>> stated. All copyright in any of the material in this email is >>>> reserved. All emails, incoming and outgoing, may be recorded and >>>> monitored for legitimate business purposes. We exclude all >>>> liability for any loss or damage arising or resulting from the >>>> receipt, use or transmission of this email to the fullest extent >>>> permitted by law. >>>> >>> >>> -- >>> This message has been scanned and is believed to be clean. >>> >> >> Este correo electrónico y sus adjuntos son de naturaleza >> confidencial. A no ser que usted sea el destinatario, no puede >> utilizar, copiar o desvelar tanto el mensaje como cualquier >> información contenida en el mensaje. Si no es el destinatario, debe >> borrar este correo y notificar al remitente inmediatamente. Cualquier >> punto de vista u opinión expresada en este correo electrónico son >> únicamente del remitente, a no ser que se indique lo contrario. Todos >> los derechos de autor en cualquier material de este correo son >> reservados. Todos los correos electrónicos, salientes o entrantes, >> pueden ser grabados y monitorizados para uso legítimo del negocio. >> Nos encontramos exentos de toda responsabilidad ante cualquier >> perdida o daño que surja o resulte de la recepción, uso o transmisión >> de este correo electrónico hasta el máximo permitido por la ley. >> >> This email and any attachment to it are confidential. Unless you are >> the intended recipient, you may not use, copy or disclose either the >> message or any information contained in the message. If you are not >> the intended recipient, you should delete this email and notify the >> sender immediately. Any views or opinions expressed in this email are >> those of the sender only, unless otherwise stated. All copyright in >> any of the material in this email is reserved. All emails, incoming >> and outgoing, may be recorded and monitored for legitimate business >> purposes. We exclude all liability for any loss or damage arising or >> resulting from the receipt, use or transmission of this email to the >> fullest extent permitted by law. > > > Este correo electrónico y sus adjuntos son de naturaleza confidencial. A no > ser que usted sea el destinatario, no puede utilizar, copiar o desvelar tanto > el mensaje como cualquier información contenida en el mensaje. Si no es el > destinatario, debe borrar este correo y notificar al remitente > inmediatamente. Cualquier punto de vista u opinión expresada en este correo > electrónico son únicamente del remitente, a no ser que se indique lo > contrario. Todos los derechos de autor en cualquier material de este correo > son reservados. Todos los correos electrónicos, salientes o entrantes, pueden > ser grabados y monitorizados para uso legítimo del negocio. Nos encontramos > exentos de toda responsabilidad ante cualquier perdida o daño que surja o > resulte de la recepción, uso o transmisión de este correo electrónico hasta > el máximo permitido por la ley. > > This email and any attachment to it are confidential. Unless you are the > intended recipient, you may not use, copy or disclose either the message or > any information contained in the message. If you are not the intended > recipient, you should delete this email and notify the sender immediately. > Any views or opinions expressed in this email are those of the sender only, > unless otherwise stated. All copyright in any of the material in this email > is reserved. All emails, incoming and outgoing, may be recorded and monitored > for legitimate business purposes. We exclude all liability for any loss or > damage arising or resulting from the receipt, use or transmission of this > email to the fullest extent permitted by law. >