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

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

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

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

"Random_key": {
    "int": 9088245671
  }

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

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

 "Random_key": null 

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

"Random_key": 9088245671

Спасибо!


person Tony    schedule 12.12.2018    source источник


Ответы (1)


Это нормально, это означает, что поле Random_key является записью avro типа Union. Для типа union вы должны установить значение по умолчанию, которое соответствует типу объединения, и в вашем случае ваш CDC интерпретирует ограничение схемы поля базы данных как union { null, int}.

Если поле не равно нулю, это означает, что это целое число, а в avro, когда это объединение, вы должны указать соответствующий тип. Представьте, если у вас есть это: union {string, int, double}. Здесь поле является правильным, если это строка, целое число или двойное число, но мы хотим знать для каждого поля, каков настоящий тип этих данных.

К сожалению, это правильное поведение, но обычно вас это не волнует. avro-console-consumer используйте сериализатор json для печати данных, чтобы вы могли их прочитать. В вашем коде тип данных поля будет правильно интерпретирован, как вы хотите.

РЕДАКТИРОВАТЬ: Если вам нужна запись в формате json, есть парень, который хотел изменить представление в более читаемом json и разработал набор кодировщика / декодера для использования вместо стандартного:

https://github.com/zolyfarkas/avro/commit/8926d6e9384eb3e7d95f05a9d1653ba9348f1966

person Saïd Bouras    schedule 12.12.2018
comment
Позвольте спросить, какое у вас приложение? Кафка стримит? Api клиентов Kafka (производитель / потребитель)? - person Saïd Bouras; 13.12.2018
comment
API клиентов Kafka. На данный момент мы тестируем данные в теме и обнаружили, что странные столбцы вызывают только в столбцах, определенных как null по умолчанию. - person Tony; 13.12.2018
comment
Хорошо, обычно, если вы работаете с клиентским API или любыми другими API с java / scala, тип ваших данных будет интерпретироваться правильно (любой непримитивный тип в java может быть нулевым), поэтому у вас не будет проблем из-за этого. - person Saïd Bouras; 13.12.2018
comment
Обратите внимание, что это просто представление записи avro в json! - person Saïd Bouras; 13.12.2018
comment
Я только что отредактировал свой ответ, если вам нужно отправить запись avro в формате json, но я настаиваю на том, что если вам не нужно отправлять сообщение в формате json, нет проблем, это просто формат отображения в консоли. - person Saïd Bouras; 13.12.2018