【问题标题】:Kafka-Connect JDBC Connector tinyint to boolean mappingKafka-Connect JDBC 连接器 tinyint 到布尔映射
【发布时间】: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


【解决方案1】:

您可以使用custom Transform(这是一个完美的用例)来执行此操作,或者编写一个简单的流应用程序来执行此操作,例如在 KSQL 中:

CREATE STREAM my_topic AS 
  SELECT COL1, COL2, …
         CASE WHEN is_active=1 THEN TRUE ELSE FALSE END AS is_active_bln
  FROM my_source_connect_topic;
ksql> describe my_topic;

Name                 : my_topic
 Field         | Type
-----------------------------------------
 ROWTIME       | BIGINT           (system)
 ROWKEY        | VARCHAR(STRING)  (system)
 COL1          | INTEGER
 COL1          | VARCHAR
 IS_ACTIVE_BLN | BOOLEAN
----------------------------------------

【讨论】:

  • 从文档中我明白转换可以通过 Cast 完成,或者是什么使它不起作用?
猜你喜欢
  • 2021-12-19
  • 2019-06-17
  • 2020-01-15
  • 2011-12-23
  • 2011-04-30
  • 2019-01-12
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多