Jdbc 通过Kafka连接器保存的Kafka主题未正确保存的消息

Jdbc 通过Kafka连接器保存的Kafka主题未正确保存的消息,jdbc,apache-kafka,apache-kafka-connect,confluent-platform,confluent-schema-registry,Jdbc,Apache Kafka,Apache Kafka Connect,Confluent Platform,Confluent Schema Registry,所以我设置了一个合流的Kafka JDBC连接器。首先,我启动一个模式注册表,如 ./bin/schema-registry-start ./etc/schema-registry/schema-registry.properties 这是schema-registry.properties文件 listeners=http://0.0.0.0:8081 kafkastore.connection.url=zookeeperhost:2181 kafkastore.bootstrap.serv

所以我设置了一个合流的Kafka JDBC连接器。首先,我启动一个模式注册表,如

./bin/schema-registry-start ./etc/schema-registry/schema-registry.properties
这是schema-registry.properties文件

listeners=http://0.0.0.0:8081
kafkastore.connection.url=zookeeperhost:2181
kafkastore.bootstrap.servers=PLAINTEXT://kafkahost:9092
kafkastore.topic=_schemas
debug=false
接下来,我启动一个像这样的独立连接器

./bin/connect-standalone ./etc/schema-registry/connect-avro-standalone.properties ./jdbc-source.properties
connect-avro-standalone.properties是

bootstrap.servers=kafkahost:9092

key.converter=io.confluent.connect.avro.AvroConverter
key.converter.schema.registry.url=http://localhost:8081
value.converter=io.confluent.connect.avro.AvroConverter
value.converter.schema.registry.url=http://localhost:8081

internal.key.converter=org.apache.kafka.connect.json.JsonConverter
internal.value.converter=org.apache.kafka.connect.json.JsonConverter
internal.key.converter.schemas.enable=false
internal.value.converter.schemas.enable=false

offset.storage.file.filename=/tmp/connect.offsets
plugin.path=share/java
name=jdbc_source_oracle
connector.class=io.confluent.connect.jdbc.JdbcSourceConnector
connection.url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=port))(CONNECT_DATA=(SERVER=dedicated)(SID=server)))
connection.user=xxx
connection.password=xxx
table.whitelist=table1, table2
mode=bulk
topic.prefix=my_topic
query=select * from table1 t1 join table1 t2 on t2.id = t1.id where t2.entereddate >='19-FEB-2019' and t2.entereddate <= '23-FEB-2019'
jdbc-source.properties是

bootstrap.servers=kafkahost:9092

key.converter=io.confluent.connect.avro.AvroConverter
key.converter.schema.registry.url=http://localhost:8081
value.converter=io.confluent.connect.avro.AvroConverter
value.converter.schema.registry.url=http://localhost:8081

internal.key.converter=org.apache.kafka.connect.json.JsonConverter
internal.value.converter=org.apache.kafka.connect.json.JsonConverter
internal.key.converter.schemas.enable=false
internal.value.converter.schemas.enable=false

offset.storage.file.filename=/tmp/connect.offsets
plugin.path=share/java
name=jdbc_source_oracle
connector.class=io.confluent.connect.jdbc.JdbcSourceConnector
connection.url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=port))(CONNECT_DATA=(SERVER=dedicated)(SID=server)))
connection.user=xxx
connection.password=xxx
table.whitelist=table1, table2
mode=bulk
topic.prefix=my_topic
query=select * from table1 t1 join table1 t2 on t2.id = t1.id where t2.entereddate >='19-FEB-2019' and t2.entereddate <= '23-FEB-2019'
我还使用kafka avro控制台消费者使用这个命令来消费数据

./bin/kafka-avro-console-consumer \
--bootstrap-server kafkahost:9092 \
--property print.key=true \
--from-beginning \
--topic my_topic
这两个都给了我奇怪的结果

这是Pypark代码给我的

这就是使用avro控制台给我的


屏蔽某些字段和文本,因为其中可能包含公司敏感信息。

如果您使用Spark的Avro,则需要使用

你可以从控制台看到Avro数据中的字节,然后就要处理小数/数字了


您可以阅读更多关于卡夫卡连接和Avro序列化替代方案(包括JSON)的信息。

不清楚您是如何使用数据的。您需要使用卡夫卡avro控制台消费者。另外,我相信时间戳递增模式至少需要秒的时间精度,而不是字符串日期列SBTW,如果你使用
query
你不需要
table.whitelist
。另请参阅@cricket\u 007,我更新了我的帖子,介绍了我是如何从主题中消费的,在这种情况下我也没有使用递增模式。我使用批量模式,以便测试功能,这就是我使用字符串数据列的原因。这有关系吗?@RobinMoffatt我以前试过不使用table.whitelist,但我得到了一个异常
java.sql.SQLException:Invalid column type:getTimestamp没有为类oracle.jdbc.driver.T4CClobAccessor实现,我也查看了该链接,但找不到任何有助于meThis是为Scala实现的,不确定它是否适用于python。在使用卡夫卡连接器时,有没有办法不使用Avro?是的,您可以使用JsonConverter(甚至是StringConverter),尽管我不明白您为什么要这样做。我在我的答案中添加了一个链接,可以帮助您解释这一点:您可以使用Python使用Avro序列化消息:/@anonuser1234您可能希望尝试将Spark输出到控制台@cricket_007,谢谢,但这似乎只是scala的问题。我和Pypark一起工作