I had the same thoughts as Yacine and I was surprised that adding a new union type or a new enum value is not a forward compatible change (given that there is a default value, e.g. null).
https://stackoverflow.com/questions/54439315/avro-union-forward-compatibility <https://stackoverflow.com/questions/54439315/avro-union-forward-compatibility> I will probably go for option 3 as not skipping/ losing events is more important to the project than decoupling microservices: 1. Handle exception in custom derserialiser and skip event (may lose interesting events - For not losing events all consuming services must be upgraded before all the producing services) 2. Convert all custom record unions to separate optional fields (may lose interesting events, as change is forward compatible and consuming services will not block) 3. Accept de-serialisation error/ block consumption and bump version in all consuming services that use schema on new custom record type (this guarantees that no interesting event is lost). -- Sent from: http://apache-avro.679487.n3.nabble.com/Avro-Developers-f679485.html