Hi all, Thanks again for the help! I have one more follow up question regarding Flink and serialization on v1.18. I know state schema evolution is supported for POJOs in Flink. However, if my class uses the POJO serializer but has a field that falls back to Kryo (such as UUID), would it still be eligible for Flink’s state schema evolution support?
Best, Richard On Fri, May 16, 2025 at 3:59 AM Zhanghao Chen <zhanghao.c...@outlook.com> wrote: > Flink 2.0 will work. You may use Types.LIST for lists and Types.MAP for > sets (mocked by a Map) for that. Notice that Flink's built-in LIST does > not support null element and MAP type does not support null key, and > neither support null collection. In Flink 2.0, we've added special > treatment of these nullable cases. > > Best, > Zhanghao Chen > ------------------------------ > *From:* Мосин Николай <mosin...@yandex.ru> > *Sent:* Friday, May 16, 2025 0:02 > *To:* Richard Cheung <rcheungsi...@gmail.com> > *Cc:* Schwalbe Matthias <matthias.schwa...@viseca.ch>; Zhanghao Chen < > zhanghao.c...@outlook.com>; user@flink.apache.org <user@flink.apache.org> > *Subject:* Re: Apache Flink Serialization Question > > For List I just setup TypeInfoFactory like: > > public class SomeDataDTOTypeInfoFactory extends > TypeInfoFactory<SomeDataDTO> { > @Override > public TypeInformation<SomeDataDTO> createTypeInfo(Type t, Map<String, > TypeInformation<?>> genericParameters) { > return Types.POJO(SomeDataDTO.class, new HashMap<String, > TypeInformation<?>>() { > { > .... > put("sessionId", UUIDTypeInfo.INSTANCE); > put("tags", Types.LIST(Types.STRING)); > .... > } > }); > } > } > > and annotate DTO > @TypeInfo(SomeDataDTOTypeInfoFactory.class) > public class SomeDataDTO { > .... > private UUID sessionId; > private List<String> tags = new ArrayList<>(); > .... > > But for Set I don't found workaround and as I understand it must be > replaced by List > > > > > ---------------- > Кому: Mosin Nick (mosin...@yandex.ru); > Копия: Schwalbe Matthias (matthias.schwa...@viseca.ch), Zhanghao Chen ( > zhanghao.c...@outlook.com), user@flink.apache.org; > Тема: Apache Flink Serialization Question; > 15.05.2025, 18:27, "Richard Cheung" <rcheungsi...@gmail.com>: > > Thanks for all the replies! > > I’ve decided to just update my UUID field to a String for POJO compliance. > However, I’m getting the same log issues for List<String> and Set<String> > saying that fields will be processed as GenericType. I want everything to > be fully POJO compatible so I can have schema evolution for the future. Is > there a workaround for this for POJO compliance in Flink v1.8 or would I > have to upgrade to Flink v2 which supports common collection types for > serialization or maybe the even upgrading to v2 won’t work? > > Best regards, > Richard > > On Thu, May 15, 2025 at 9:06 AM Mosin Nick <mosin...@yandex.ru> wrote: > > Github already contain some serializer for UUID > https://github.com/gAmUssA/datalorean/blob/main/src/main/java/com/example/datadelorean/serialization/UUIDSerializer.java > Work well for me > > > > ---------------- > Кому: Zhanghao Chen (zhanghao.c...@outlook.com), Richard Cheung ( > rcheungsi...@gmail.com), user@flink.apache.org (user@flink.apache.org); > Тема: Apache Flink Serialization Question; > 15.05.2025, 15:56, "Schwalbe Matthias" <matthias.schwa...@viseca.ch>: > > Hi Richard, > > > > Same problem, 12 Flink versions later, > > > > I created my own TypeInformation/Serializer/Snapshot for UUID (Scala in > that case), along: > > > > class UUIDTypeInformation extends TypeInformation[UUID] > > … > > class UUIDSerializer extends TupleSerializerBase[UUID]( > > … > > class UUIDSerializerSnapshot(serializer: UUIDSerializer) extends > CompositeTypeSerializerSnapshot[UUID, UUIDSerializer](serializer) { > > … > > > > Altogether 100 lines of code, implementation is simple, you only need to > implement the respective apis and ‘follow the types’ > > And the register the UUIDTypeInformation with the Flink type system. > > > > > > … unfortunately I haven’t got the permission to share the code … > > > > Hope that helps 😊 > > > > This > > > > > > > > > > > > > > *From:* Zhanghao Chen <zhanghao.c...@outlook.com> > *Sent:* Wednesday, May 14, 2025 3:00 AM > *To:* Richard Cheung <rcheungsi...@gmail.com>; user@flink.apache.org > *Subject:* [External] Re: Apache Flink Serialization Question > > > > ⚠*EXTERNAL MESSAGE – CAUTION: Think Before You Click *⚠ > > > > Flink still use PojoSerializer for the class while only using Kryo for the > UUID field. > > > > Best, > > Zhanghao Chen > ------------------------------ > > *From:* Richard Cheung <rcheungsi...@gmail.com> > *Sent:* Wednesday, May 14, 2025 3:21 > *To:* user@flink.apache.org <user@flink.apache.org> > *Subject:* Apache Flink Serialization Question > > > > Hi all! > > > > I have a question about serialization of POJO data classes in Apache Flink > v1.8 (Java). Here's some context: > > > > One of my data classes was initially not POJO compatible as it had final > fields and no no-arg constructor. I removed the final modifiers and added a > no-arg constructor, and confirmed that the serializer switched from > KryoSerializer to PojoSerializer using TypeInformation and TypeSerializer > to log the info. > > > > However, one of the fields in the class is a java.util.UUID, which is not > POJO compatible. I see a log message saying that the UUID field cannot be > used as a POJO type. The logs also say that the UUID field will be > processed as a generic type which means that, to my knowledge, the > KryoSerializer will be used. These logs appear after the one indicating > that the PojoSerializer is being used for my data class. > > > > My question is: > > Does the presence of the UUID field cause the entire class to be > serialized with KryoSerializer or does Flink still use PojoSerializer for > the class while only using Kryo for the UUID field? > > > > Best regards, > > Richard > Diese Nachricht ist ausschliesslich für den Adressaten bestimmt und > beinhaltet unter Umständen vertrauliche Mitteilungen. Da die > Vertraulichkeit von e-Mail-Nachrichten nicht gewährleistet werden kann, > übernehmen wir keine Haftung für die Gewährung der Vertraulichkeit und > Unversehrtheit dieser Mitteilung. Bei irrtümlicher Zustellung bitten wir > Sie um Benachrichtigung per e-Mail und um Löschung dieser Nachricht sowie > eventueller Anhänge. Jegliche unberechtigte Verwendung oder Verbreitung > dieser Informationen ist streng verboten. > > This message is intended only for the named recipient and may contain > confidential or privileged information. As the confidentiality of email > communication cannot be guaranteed, we do not accept any responsibility for > the confidentiality and the intactness of this message. If you have > received it in error, please advise the sender by return e-mail and delete > this message and any attachments. Any unauthorised use or dissemination of > this information is strictly prohibited. > >