Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka Kafka Connect JDBC在JsonConverter上失败_Apache Kafka_Apache Kafka Connect - Fatal编程技术网

Apache kafka Kafka Connect JDBC在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

我正在设计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 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"
    }
}