我正在使用Confluent JDBC Sink Connector捕获从Kafka主题到数据库的所有更改。我的消息是没有任何附加架构的JSON格式。例如:
{ "key1": "value1", "key2": 100}
这是我的配置:
name=sink-mysql-1
connector.class=io.confluent.connect.jdbc.JdbcSinkConnector
tasks.max=1
topics=send_1
key.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schemas.enable=false
value.converter=org.apache.kafka.connect.json.JsonConverter
value.converter.schemas.enable=false
database.hostname=jdbc:mysql://0.0.0.0:3306/test_tbl
database.user=root
database.password=root
insert.mode=upsert
pk.mode=kafka
auto.create=true
auto.evolve=true
我遇到的问题是:由于旧系统的原因,我无法更改消息格式。所以我的消息是没有模式信息的JSON对象。库是否支持映射字段?例如,在数据库下从字段A到字段B的映射。
谢谢
答案 0 :(得分:0)
您必须对您的数据有一个声明的架构,以使用JDBC Sink。实际上,这意味着您需要:
如果在将数据生成到Kafka时没有该选项,则可以构建一个应用模式的流处理阶段。您可以使用Kafka Streams或KSQL来完成此操作。该输出是一个Kafka主题,然后将其用作Kafka Connect的源。在KSQL中执行此操作的示例为:
-- Declare the schema of the source JSON topic
CREATE STREAM send_1_src (KEY1 VARCHAR,
KEY2 INT)
WITH (KAFKA_TOPIC='send_1',
VALUE_FORMAT='JSON');
-- Run a continuous query populating the target topic `SEND_1_AVRO`
-- with the data from `send_1` reserialised into Avro
CREATE STREAM SEND_1_AVRO
WITH (VALUE_FORMAT='AVRO') AS
SELECT *
FROM send_1_src;
答案 1 :(得分:-1)
还有另一种选择,编写一个使用者拦截器,然后将模式附加到JDBC接收器连接器使用的值之前。
我尝试了,它成功了!