Я пытаюсь прочитать данные из DB2, используя Kafka, а затем записать их в HDFS.Я использую распределенную платформу слива со стандартными разъемами JDBC и HDFS.Поскольку соединитель HDFS должен знать схему, он требует наличия авроданных в качестве входных данных.Таким образом, я должен указать следующие avro конвертеры для данных, передаваемых в Kafka (в etc / kafka / connect-distributed.properties):
key.converter=io.confluent.connect.avro.AvroConverter
key.converter.schema.registry.url=http://localhost:8081
value.converter=io.confluent.connect.avro.AvroConverter
value.converter.schema.registry.url=http://localhost:8081
Затем я запускаю свой JDBC-коннектор и проверяю с помощью консоли:Avro-потребитель, который я могу успешно прочитать данные, полученные из DB2.
Однако, когда я запускаю HDFS Connector, он больше не работает.Вместо этого он выводит SerializationException:
Error deserializing Avro message for id -1
... Unknown magic byte!
Чтобы проверить, является ли это проблемой с разъемом HDFS, я попытался использовать простой разъем FileSink.Тем не менее, я увидел точно такое же исключение при использовании FileSink (и сам файл был создан, но остался пустым).
Затем я провел следующий эксперимент: вместо использования avro конвертера для ключа и значения я использовал конвертеры json:
key.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schema.enable=false
value.converter=org.apache.kafka.connect.json.JsonConverter
value.converter.schema.enable=false
Это устранило проблему с соединителем FileSink, т. Е.Весь конвейер от DB2 до файла работал нормально.Однако для соединителя HDFS это решение невозможно, так как соединителю требуется схема и, следовательно, формат avro в качестве входа.
Мне кажется, что десериализация формата avro в разъемах приемника не реализована должным образом, так какconsole-avro-consumer все еще может успешно читать данные.Кто-нибудь имеет представление о том, что может быть причиной такого поведения?Я также был бы признателен за идею простого решения этой проблемы!