Kafka JDBC源连接器(Oracle)编码乱码问题求助
问题解决步骤
1. 配置Kafka Connect的JSON转换器
你的连接器配置缺少value.converter和key.converter设置,默认使用ByteArrayConverter将数据以二进制格式写入Kafka主题,导致KSQL解析JSON时出现乱码。需添加以下配置:
'value.converter' = 'org.apache.kafka.connect.json.JsonConverter', 'value.converter.schemas.enable' = 'false', 'key.converter' = 'org.apache.kafka.connect.storage.StringConverter'
(若需要带Schema的JSON,可将schemas.enable设为true,但你的KSQL流定义未指定Schema,建议设为false)
2. 修正Oracle JDBC连接的字符集参数
Oracle Thin驱动不支持characterEncoding参数,需通过以下方式指定字符集:
- 方法1:修改JDBC URL
将连接URL调整为:
'connection.url' = 'jdbc:oracle:thin:@//HOSTIP:PORT/Service?charset=UTF8&ncharset=UTF8'
charset用于单字节字符集,ncharset用于多字节字符集(如UTF-8)。
- 方法2:设置环境变量
在运行Kafka Connect的环境中添加:
export NLS_LANG=AMERICAN_AMERICA.UTF8
3. 验证Oracle数据库字符集
确保Oracle数据库的字符集与配置一致,可执行以下SQL查询:
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
若结果不是UTF-8相关字符集(如AL32UTF8),需确认业务需求是否需要转换,或联系DBA调整。
修改后的完整连接器配置
CREATE SOURCE CONNECTOR hsr_source_connector2 WITH ( 'connection.url' = 'jdbc:oracle:thin:@//HOSTIP:PORT/Service?charset=UTF8&ncharset=UTF8', 'connector.class' = 'io.confluent.connect.jdbc.JdbcSourceConnector', 'connection.user' = '{User}', 'connection.password' = '{PASS}', 'mode' = 'bulk', 'query' = 'select * from <Tablename>', 'topic.prefix' = 'newuser_', 'value.converter' = 'org.apache.kafka.connect.json.JsonConverter', 'value.converter.schemas.enable' = 'false', 'key.converter' = 'org.apache.kafka.connect.storage.StringConverter', 'transforms' = 'createKey,extractInt', 'transforms.createKey.type' = 'org.apache.kafka.connect.transforms.ValueToKey', 'transforms.createKey.fields' = 'USER_ID', 'transforms.extractInt.type' = 'org.apache.kafka.connect.transforms.ExtractField$Key', 'transforms.extractInt.field' = 'USER_ID' );
官方文档参考
Confluent JDBC源连接器的配置文档中,转换器配置和Oracle连接参数章节详细说明了这些设置的作用:
- 转换器配置:控制数据在Kafka中的序列化格式,需匹配下游KSQL的解析格式
- Oracle连接参数:需遵循Oracle Thin驱动的参数规范,而非通用JDBC的
characterEncoding
内容的提问来源于stack exchange,提问作者Pradyumn Joshi
相关产品推荐
相关产品推荐

