我们可以使用Kafka Streams中的哪个类/方法将Java对象序列化/反序列化为字节数组,反之亦然?以下链接建议使用ByteArrayOutputStream& ObjectOutputStream但它们不是线程安全的。
Send Custom Java Objects to Kafka Topic
还有另一个选项可以使用ObjectMapper,ObjectReader(用于线程安全),但是从POJO转换 - > JSON - >字节组。似乎这个选项很广泛。想要检查是否有直接的方法将对象转换为bytearray,反之亦然,这是线程安全的。请建议
import org.apache.kafka.common.serialization.Serializer;
public class HouseSerializer<T> implements Serializer<T>{
private Class<T> tClass;
public HouseSerializer(){
}
@SuppressWarnings("unchecked")
@Override
public void configure(Map configs, boolean isKey) {
tClass = (Class<T>) configs.get("POJOClass");
}
@Override
public void close() {
}
@Override
public byte[] serialize(String topic, T data) {
//Object serialization to be performed here
return null;
}
}
注:Kafka版本 - 0.10.1
答案 0 :(得分:2)
想要检查是否有直接的方法将对象转换为bytearray
如果可能的话,我建议您查看将Avro serialization与Confluent Schema Registry一起使用,但不是必需的。 JSON是一个很好的后退,但在线上会占用更多的空间&#34;,因此MsgPack将是替代品。
上面的示例使用avro-maven-plugin从src/main/resources/avro
模式文件生成LogLine类。
否则,how to serialize your object into a byte array取决于您,例如,字符串通常打包为
[(length of string) (UTF8 encoded bytes)]
虽然布尔值是单个0或1位
是线程安全的
我理解这种担忧,但您通常不会在线程之间共享反序列化数据。您为每个独立的消息发送/读取/处理消息。