簡體   English   中英

Kafka-Connect JDBC 連接器 tinyint 到布爾映射

[英]Kafka-Connect JDBC Connector tinyint to boolean mapping

我有一個 Kafka-Connect 作業配置為定期查詢 MySQL 表並將消息放在隊列中。 這些消息的結構是使用 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" }

您可以使用自定義轉換(這是它的完美用例)來執行此操作,也可以編寫一個簡單的流應用程序來執行此操作,例如在 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
----------------------------------------

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM