Я думаю, вы имеете в виду этот комментарий в документации:
Мы рекомендуем пользователям использовать нового производителя в org.apache.kafka.clients.producer.KafkaProducer
. Если вы используете версию Kafka старше 0.8.2.0, вы можете подключить KafkaAvroEncoder
к старому производителю в kafka.javaapi.producer
. Однако будут некоторые ограничения. Вы можете использовать KafkaAvroEncoder
только для сериализации значения сообщения и отправлять только значение типа Avro record. Схема Avro для значения будет зарегистрирована под субъектом recordName-value
, где recordName
- имя записи Avro. По этой причине один и тот же тип записи Avro не следует использовать более чем в одной теме.
Во-первых, комментатор выше прав - это относится только к старому API производителя до 0.8.2. В любом случае настоятельно рекомендуется использовать нового производителя, поскольку это гораздо лучшая реализация, не зависит от всего ядра jar и является клиентом, который будет поддерживаться в будущем (конкретной временной шкалы пока нет, но старый производитель в конечном итоге будет объявлен устаревшим, а затем удален).
Однако, если вы используете старый производитель, это ограничение требуется только в том случае, если схема для двух субъектов может развиваться отдельно. Предположим, вы написали два приложения, которые писали по разным темам, но использовали один и тот же тип записи Avro, назовем его record
. Теперь оба приложения зарегистрируют / найдут его в теме record-value
и получат version=1
. Это все нормально, пока схема не меняется. Но скажем, приложению A теперь нужно добавить поле. Когда это произойдет, схема будет зарегистрирована под субъектом record-value
и получит присвоение version=2
. Это нормально для приложения A, но приложение B либо не было обновлено для обработки этой схемы, либо, что еще хуже, схема даже не действительна для приложения B. Однако вы теряете защиту реестра схемы. обычно дает вам - теперь какое-то другое приложение может публиковать данные этого формата в теме, используемой приложением B (это выглядит нормально, потому что record-value
зарегистрировала эту схему). Теперь приложение B может видеть данные, с которыми оно не знает, как обрабатывать, поскольку это не поддерживаемая им схема.
Итак, краткая версия заключается в том, что, поскольку со старым производителем объект должен быть разделен, если вы также используете ту же схему, вы в конечном итоге объединяете два приложения и схемы, которые они должны поддерживать. Вы можете использовать одну и ту же схему для разных тем, но мы рекомендуем этого не делать, поскольку она объединяет ваши приложения (и их разработку, команды, разрабатывающие их, и т. Д.).
person
Ewen Cheslack-Postava
schedule
23.07.2016