Формат сообщения IIDR CDC Kafka
Мы отправляем данные таблицы из db2 в iidr-cdc в kafka . У нас проблемы с форматом данных в теме Kafka, когда вы видите сообщения в kafka-avro-console-consumer .
Для столбцов Db2, определенных как DEFAULT NULL, если их значение равно NULL, это прекрасно выглядит в теме kafka (как key:value) . НО, когда значение не равно нулю, оно помещается в словарь.
Пример вывода, если столбец -
"Random_key": {
"int": 9088245671
}
Здесь ключом этой записи является тип данных столбца, а значением является значение столбца. -> Этот формат вывода нежелателен для нашего приложения
Если на самом деле значение равно нулю, а столбец определен как DEFAULT NULL, он выглядит нормально. Как и ожидалось -
"Random_key": null
Как мы можем внести изменения либо в IIDR CDC, либо в сторону KAFKA, чтобы всегда отображать сообщение в формате ключ: значение, например, так (даже если столбец DEFAULT NULL содержит некоторое значение в столбце)
"Random_key": 9088245671
Спасибо!
1 ответ
Это нормально, это означает, что поле Random_key
это авро запись типа Union
, С union
тип, вы должны установить значение по умолчанию, соответствующее типу объединения, и в вашем случае ваш CDC интерпретируется как ограничение схемы поля базы данных как union { null, int}
,
Если поле не является нулевым, это означает, что оно является целым числом, а в avro, когда оно является объединением, вы должны указать, какой тип соответствует. Представьте, если у вас есть это: union {string, int, double}
, Здесь поле является правильным, когда оно представляет собой строку, целое или двойное число, но мы хотим знать для каждого поля, каков реальный тип этих данных.
К сожалению, это правильное поведение, но обычно вас это не волнует. avro-console-consumer
используйте сериализатор json, чтобы распечатать данные, чтобы вы могли их прочитать. В вашем коде тип данных поля будет правильно интерпретирован так, как вы хотите.
РЕДАКТИРОВАТЬ: Если вам нужна абсолютная запись в формате json, есть человек, который хотел изменить представление в более читаемый json и разработал набор кодера / декодера, чтобы использовать вместо значения по умолчанию:
https://github.com/zolyfarkas/avro/commit/8926d6e9384eb3e7d95f05a9d1653ba9348f1966