например, поле имени теперь разделено на first_name и last_name
Определение Avro "обратно совместимой" схемы не позволило вам добавить эти новые поля без 1) сохранения старогополе имени 2) добавление значений по умолчанию к новым полям - https://docs.confluent.io/current/schema-registry/avro.html
Если ваши Потребители сначала обновят свою схему, они увидят поле старого имени, продолжая отправляться старыми производителями, а также интерпретируя значения по умолчанию дляновые поля, пока производители не обновят и не начнут отправлять новые поля
Если производители обновятся первыми, то потребители никогда не увидят новые поля, поэтому производители все равно должны отправить поле имени или выбрать отправку мусоразначение, которое начнет преднамеренно нарушать потребителей (например, сделать поле пустым для начала, но никогда не отправлять пустое значение, затем начать отправку пустого значения, в то время как потребители предполагают, что оно не может быть пустым)
В любом случае, я чувствуюкак ваша логика обработки записей должна определить, какие поля доступны ине NULL или их значения по умолчанию.
Но , сравните это с JSON или любой простой строкой (например, CSV), и у вас нет гарантии того, какие поля должны быть там, если ониnullable, или какие они типы (дата является строкой или длинной?), поэтому вы не можете гарантировать, на какие объекты ваши клиенты будут внутренне отображать сообщения для обработки ... Это большее преимущество Avro, чем я нахожу, чем правила совместимости
Лично я считаю, что принудительная совместимость FULL_TRANSITIVE в реестре работает лучше всего, когда между вашими пользователями Kafka практически отсутствует связь