尝试对 JSON 消息进行分区的 ClassCastException

ClassCastException trying to partition JSON messages

我正在尝试编写自定义 Kafka Partitioner(逻辑基于值而不是键) 该值有一个 JSON 字符串 “对象值”的示例 =“{姓名:“约翰”,年龄:31,城市:“纽约”}”

public class JsonPartitioner implements Partitioner {
public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {
        int partitionNumber = 0;
        
        String jsonStringValue = (String)value;// this is giving exception
        jsonStringValue = jsonStringValue.toLowerCase(); 
        JSONObject obj = new JSONObject(jsonString);
    }
}

错误 java.lang.ClassCastException: [B 无法转换为 java.lang.String 在 com.xxx.yyy.kafka.partitioner.JsonPartitioner.partition(JsonPartitioner.java:86) ~[JsonPartitioner-0.0.1-SNAPSHOT.jar:?]

我不确定,如何将传入对象转换为字符串然后再转换为 json 寻求帮助

Error java.lang.ClassCastException: [B cannot be cast to java.lang.String 

[B 表示 byte[] :请​​参阅 javadoc 以获得 Class.getName()。因此,您正试图将 byte[] 转换为 String。如果你有一个 byte[] 你可以使用 String 构造函数之一从它创建一个字符串。你不能 cast a byte[] to a String.

另请注意,当您从 byte[] 创建 String 时,您需要知道并使用正确的字节字符编码。如果您使用了错误的字符编码,您可能会在字符串中出现乱码。

可能是正确的方法...

String jsonStringValue = new String((byte[]) value);  // this uses the platform
                                                      // default character encoding

参考String javadoc其他可能更合适的构造函数。