Формат сообщения IIDR CDC Kafka - PullRequest
       99

Формат сообщения IIDR CDC Kafka

0 голосов
/ 12 декабря 2018

Мы отправляем данные таблицы из db2 в iidr-cdc в kafka.У нас проблема с форматом данных в теме Kafka, когда вы видите сообщения в kafka-avro-console-consumer.

Для столбцов Db2, определенных как DEFAULT NULL, если их значение равно нулю, в теме kafka это выглядит нормально.(как ключ: значение).НО, если значение не равно нулю, оно помещается в словарь.

Пример Вывод, если столбец - -

"Random_key": {
    "int": 9088245671
  }

Здесь ключом этой записи является тип данных столбца изначение является значением столбца. -> Этот формат вывода нежелателен для нашего приложения.

Если значение на самом деле равно нулю, а столбец определен как DEFAULT NULL, он выглядит нормально. Как и ожидалось -

 "Random_key": null 

Как мы можем внести изменения либо в CDC IIDR, либо в сторону KAFKA, чтобы всегда отображать сообщение в формате key: value, например, - (даже если DEFAULTNULL столбец содержит некоторое значение в столбце)

"Random_key": 9088245671

Спасибо!

1 Ответ

0 голосов
/ 12 декабря 2018

Это нормально, это означает, что поле 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

...