kafka-connect-transforms 中文乱码

kafka-connect-transforms 中文乱码

问题描述

目前使用kafka-connect将分布式数据采集到集中式数据库,在采集时,需要追加数据来源标识,其中包含中文内容;

使用notepad++编辑源端配置文件connect-jdbc-source.properties,示例如下:

# 转换处理
transforms=insertField
transforms.insertField.type=org.apache.kafka.connect.transforms.InsertField$Value
transforms.insertField.static.field=jgmc
transforms.insertField.static.value=xxx社区

但是目标端接收该数据时,数据发生乱码,显示为:

xxx社区

解决办法

检查kafka源码,发现其使用Properties类加载配置文件,代码片段如下:

    /**
     * Read a properties file from the given path
     * @param filename The path of the file to read
     * @param onlyIncludeKeys When non-null, only return values associated with these keys and ignore all others
     * @return the loaded properties
     */
    public static Properties loadProps(String filename, List<String> onlyIncludeKeys) throws IOException {
        Properties props = new Properties();

        if (filename != null) {
            try (InputStream propStream = Files.newInputStream(Paths.get(filename))) {
                props.load(propStream);
            }
        } else {
            System.out.println("Did not load any properties since the property file is not specified");
        }

        if (onlyIncludeKeys == null || onlyIncludeKeys.isEmpty())
            return props;
        Properties requestedProps = new Properties();
        onlyIncludeKeys.forEach(key -> {
            String value = props.getProperty(key);
            if (value != null)
                requestedProps.setProperty(key, value);
        });
        return requestedProps;
    }

使用该代码片段,在eclipse中编写测试类,直接读取配置文件确实会出现同样问题。

此时使用eclipse打开该配置文件,发现同样显示乱码。

尝试直接在eclipse中编辑该配置文件,添加中文xxx社区,得到的输出是xxx\u793E\u533A,格式如下:

# 转换处理
transforms=insertField
transforms.insertField.type=org.apache.kafka.connect.transforms.InsertField$Value
transforms.insertField.static.field=jgmc
transforms.insertField.static.value=xxx\u793E\u533A

此时再次执行测试类,发现输出正常。

按照上述方式修改kafka-connect配置文件,中文信息可以正确显示到目标数据库了,问题解决。

截图如下

id=22 为异常数据;
id=23为修改配置后的正常数据;
在这里插入图片描述

kafka-connect-transform-kryptonite 是 Kafka Connect 的一个转换器插件。Kafka Connect 是一个可扩展的分布式数据集成工具,可用于在 Apache Kafka 和外部系统之间进行可靠和高效的数据流传输。而 Kafka Connect 转换器是用于对数据进行转换、过滤或处理的插件。 Kafka Connect 是一个开源的分布式数据集成框架,用于连接和处理来自各种数据源的数据,例如数据库、消息队列和文件系统等。它提供了一个统一的、可扩展的架构,允许用户将数据从多个来源导入到 Kafka 中,并将数据导出到多个目标系统。这为数据集成提供了更加灵活和可靠的方式,且能够满足各种实时数据处理的需求。 Kafka Connect 的一个关键特性是插件化的架构,使得用户可以根据自己的需求,选择和配置合适的插件。其中,kafka-connect-transform-kryptonite 插件就是其中之一。Kryptonite 可以理解为一种“解除”或“削弱”转换器,它可能采用一些特定的规则或算法,对输入的数据进行加工、转换或过滤。 使用 kafka-connect-transform-kryptonite 插件,我们可以根据具体的业务需求,对 Kafka 中的消息进行处理。例如,我们可以通过 Kryptonite 转换器,将消息中的某些字段进行加密,以保护敏感数据的安全;或者根据一些规则,对消息进行过滤和筛选,只保留我们关心的数据。 总之,kafka-connect-transform-kryptonite 是 Kafka Connect 提供的一个转换器插件,可以用于对数据进行加工、转换和过滤。通过这个插件,我们可以根据业务需求对 Kafka 中的消息进行定制化处理,以满足不同场景下的数据集成和处理需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值