Kafka Connect消息键Base64编码问题:如何将整型ID显示为普通数字
问题描述
使用以下JDBC源连接器配置时:
#Connector: - name: some-connector #source-connector2-name config: connector.class: io.confluent.connect.jdbc.JdbcSourceConnector #fullClassPath mode: timestamp timestamp.column.name: update_ts query: SELECT id, name FROM customer_account transforms: createKey, ExtractField transforms.createKey.type: org.apache.kafka.connect.transforms.ValueToKey transforms.createKey.fields: id transforms.ExtractField.type: org.apache.kafka.connect.transforms.ExtractField$Key transforms.ExtractField.field: id topic.prefix: secret.value://secret.txt validate.non.null: false
键字段id为整型,但消息生产至Kafka后,日志中显示消息键id被Base64编码且为字符串类型,期望它以普通数字形式显示,而非Base64编码状态。此前尝试过在线方案中的键转换器但未生效。
解决方案
问题根源在于未配置正确的键转换器(Key Converter),默认的StringConverter会将所有键序列化为字符串并以Base64编码形式存储。需添加以下配置来实现数字类型键的正确序列化:
方案1:使用JSON转换器(无Schema)
在连接器配置中添加键转换器参数:
key.converter: org.apache.kafka.connect.json.JsonConverter key.converter.schemas.enable: false
修改后的完整配置:
#Connector: - name: some-connector #source-connector2-name config: connector.class: io.confluent.connect.jdbc.JdbcSourceConnector #fullClassPath mode: timestamp timestamp.column.name: update_ts query: SELECT id, name FROM customer_account transforms: createKey, ExtractField transforms.createKey.type: org.apache.kafka.connect.transforms.ValueToKey transforms.createKey.fields: id transforms.ExtractField.type: org.apache.kafka.connect.transforms.ExtractField$Key transforms.ExtractField.field: id # 新增键转换器配置 key.converter: org.apache.kafka.connect.json.JsonConverter key.converter.schemas.enable: false topic.prefix: secret.value://secret.txt validate.non.null: false
方案2:使用Avro转换器(需Schema Registry)
如果使用Confluent Schema Registry,可配置Avro转换器来保留类型信息:
key.converter: io.confluent.connect.avro.AvroConverter key.converter.schema.registry.url: http://your-schema-registry-url:8081
注意事项
- 修改配置后必须重启连接器才能生效。
- 使用JSON转换器时关闭schema,能直接将整型
id序列化为JSON数字,Kafka日志中会显示原始数字值;使用Avro转换器则会通过Schema Registry管理类型,确保键的类型一致性。
内容的提问来源于stack exchange,提问作者Aditya Kumar
相关产品推荐
相关产品推荐

