【发布时间】:2019-11-13 00:19:45
【问题描述】:
我有一个配置为定期查询 MySQL 表并将消息放入队列的 Kafka-Connect 作业。这些消息的结构是使用 Avro 模式定义的。我的一个列的映射有问题。
该列在我的 MySQL 架构中定义为 tinyint(1),我正在尝试将其映射到我的 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"
}
AVRO 架构
{
"type": "record",
"name": "name",
"namespace": "com.my.model",
"fields": [
{
"name": "is_active",
"type": "long"
}
],
"connect.name": "com.my.model.name"
}
【问题讨论】:
-
投射有什么错误?
-
我现在还没有得到确切的错误,但它导致了我的架构中其他字段的类型的问题,即使我没有在“转换”中指定它们似乎也被强制转换.Cast.spec"
-
听起来是保留字问题。你有
query作为字段名吗?然后把```像`query`一样覆盖。另外,如果你有一个大的 ksql,那么删除 ksql 的某些部分并用小部分进行测试以知道哪个部分有效,例如数据库开发人员调试查询 -
不,我没有查询作为字段名称。 is_active 字段是我要添加的新字段,因此我知道其他所有内容都有效。该问题特定于这个新领域
标签: mysql jdbc avro apache-kafka-connect ksqldb