У меня есть задание Kafka-Connect, настроенное на периодический запрос таблицы MySQL и размещение сообщений в очереди. Структура этих сообщений определяется с помощью схемы Avro. У меня проблема с отображением для одного из моих столбцов.
Столбец определен как tinyint(1) в моей схеме MySQL, и я пытаюсь сопоставить его с логическим полем в моем объекте avro.
{
"name": "is_active",
"type": "boolean"
}
Задания kafka-connect выполняются, и сообщения помещаются в очередь, но когда мое приложение, которое читает из очереди, пытается десериализовать сообщения, я получаю следующую ошибку:
org.apache.avro.AvroTypeException: Found int, expecting boolean
Я надеялся, что значение 1 или 0 может быть автоматически сопоставлено с логическим значением, но, похоже, это не так.
Я также пытался настроить свою работу для использования преобразования «Cast», но это, похоже, вызвало проблемы с другими полями в сообщении.
"transforms": "Cast",
"transforms.Cast.type": "org.apache.kafka.connect.transforms.Cast$Value",
"transforms.Cast.spec": "is_active:boolean"
Возможно ли то, что я пытаюсь сделать, или мне придется изменить свое приложение для работы со значением int?
Вот моя полная конфигурация (я удалил некоторые другие нерелевантные поля)
Конфигурация задания Kafka Connect
{
"connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
"mode": "bulk",
"topic.prefix": "my_topic-name",
"transforms.SetSchemaMetadata.type": "org.apache.kafka.connect.transforms.SetSchemaMetadata$Value",
"query": "select is_active from my_table",
"poll.interval.ms": "30000",
"transforms": "SetSchemaMetadata",
"name": "job_name",
"connection.url": "connectiondetailshere",
"transforms.SetSchemaMetadata.schema.name": "com.my.model.name"
}
Схема АВРО
{
"type": "record",
"name": "name",
"namespace": "com.my.model",
"fields": [
{
"name": "is_active",
"type": "long"
}
],
"connect.name": "com.my.model.name"
}
query
как имя поля? затем поместите `` для покрытия, например `query`. также, если у вас есть большой ksql, было бы просто удалить некоторые части ksql и протестировать с небольшими частями, чтобы узнать, какая часть работает, например, разработчик базы данных отлаживает запрос - person HungUnicorn   schedule 02.07.2019