![](/img/trans.png)
[英]Kafka Connect JDBC Sink Connector giving WorkerSinkTask ERROR
[英]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.