Apache kafka Kafka Connect JDBC在JsonConverter上失败
我正在设计MySQL->Debezium->Kafka->Flink->Kafka->Kafka Connect JDBC->MySQL。下面是我从Flink写的示例消息(我也尝试过使用Kafka console producer) 但是JsonConverter上的连接失败Apache kafka Kafka Connect JDBC在JsonConverter上失败,apache-kafka,apache-kafka-connect,Apache Kafka,Apache Kafka Connect,我正在设计MySQL->Debezium->Kafka->Flink->Kafka->Kafka Connect JDBC->MySQL。下面是我从Flink写的示例消息(我也尝试过使用Kafka console producer) 但是JsonConverter上的连接失败 DataException: JsonConverter with schemas.enable requires "schema" and "payload" fields and may not contain add
DataException: JsonConverter with schemas.enable requires "schema" and "payload" fields and may not contain additional fields. If you are trying to deserialize plain JSON data, set schemas.enable=false in your converter configuration.
at org.apache.kafka.connect.json.JsonConverter.toConnectData(JsonConverter.java:338)
我已经调试过,在方法publicschema中,连接数据的值(字符串主题,字节[]值)
value为null。我的接收器配置为:
{
"name": "user-sink",
"config": {
"connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
"tasks.max": "1",
"topics": "user",
"connection.url": "jdbc:mysql://localhost:3306/my_db?verifyServerCertificate=false",
"connection.user": "root",
"connection.password": "root",
"auto.create": "true",
"insert.mode": "upsert",
"pk.fields": "id",
"pk.mode": "record_value"
}
}
有人能帮我解决这个问题吗?我认为问题与(卡夫卡消息的)值序列化无关。这是消息的关键问题 您的
键.转换器是什么?我认为这与value.converter
(org.apache.kafka.connect.json.JsonConverter
)是一样的。您的键可能是简单的字符串
,它不包含架构
,有效负载
尝试将key.converter
更改为org.apache.kafka.connect.storage.StringConverter
对于Kafka Connect,您可以设置默认的转换器
,但也可以为特定的连接器配置设置特定的转换器(这将覆盖默认转换器)。为此,您必须修改配置请求:
{
“名称”:“用户接收器”,
“配置”:{
“key.converter”:“org.apache.kafka.connect.storage.StringConverter”,
“connector.class”:“io.confluent.connect.jdbc.JdbcSinkConnector”,
“tasks.max”:“1”,
“主题”:“用户”,
“connection.url”:“jdbc:mysql://localhost:3306/my_db?verifyServerCertificate=false",
“connection.user”:“root”,
“connection.password”:“root”,
“自动创建”:“true”,
“插入模式”:“向上插入”,
“主键字段”:“id”,
“主键模式”:“记录值”
}
}
我认为问题与(卡夫卡消息的)值序列化无关。这是消息的关键问题
您的键.转换器是什么?我认为这与value.converter
(org.apache.kafka.connect.json.JsonConverter
)是一样的。您的键可能是简单的字符串
,它不包含架构
,有效负载
尝试将key.converter
更改为org.apache.kafka.connect.storage.StringConverter
对于Kafka Connect,您可以设置默认的转换器
,但也可以为特定的连接器配置设置特定的转换器(这将覆盖默认转换器)。为此,您必须修改配置请求:
{
“名称”:“用户接收器”,
“配置”:{
“key.converter”:“org.apache.kafka.connect.storage.StringConverter”,
“connector.class”:“io.confluent.connect.jdbc.JdbcSinkConnector”,
“tasks.max”:“1”,
“主题”:“用户”,
“connection.url”:“jdbc:mysql://localhost:3306/my_db?verifyServerCertificate=false",
“connection.user”:“root”,
“connection.password”:“root”,
“自动创建”:“true”,
“插入模式”:“向上插入”,
“主键字段”:“id”,
“主键模式”:“记录值”
}
}
谢谢,但如果我想使用与value类似的按键转换器。我的请求中需要更改的内容。因为在另一个水槽中,当我不涉及flink时,它就工作了。谢谢,但是如果我想使用类似于value的键转换器的话。我的请求中需要更改的内容。因为在另一个水槽里,当我不涉及弗林克时,它就起作用了。
{
"name": "user-sink",
"config": {
"connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
"tasks.max": "1",
"topics": "user",
"connection.url": "jdbc:mysql://localhost:3306/my_db?verifyServerCertificate=false",
"connection.user": "root",
"connection.password": "root",
"auto.create": "true",
"insert.mode": "upsert",
"pk.fields": "id",
"pk.mode": "record_value"
}
}