Kafka doesn’t mandate that messages conform to any given schema. In fact, messages are opaque byte arrays from Kafka’s perspective. However, it is recommended that messages follow a structure and form that allows for easy understanding. Messages can be expressed in JSON, XML, Avro, or other formats. It is important to think about and mitigate issues that arise from schema changes, however. For example, message writers should only write messages in the new format/schema once the message readers have been updated with the new schema. Avro provides support for schema evolution and allows for backward and forward compatibility.