Apache kafka Kafka流:POJO序列化/反序列化
我们可以使用Kafka Streams中的哪个类/方法将Java对象序列化/反序列化为字节数组,或者反之亦然?下面的链接建议使用ByteArrayOutputStream&ObjectOutputStream,但它们不是线程安全的 还有另一个使用ObjectMapper的选项,ObjectReader(用于线程安全),但它是从POJO->JSON->bytearray转换而来的。看来这是一个广泛的选择。希望检查是否有一种直接的方法将对象转换为bytearray,反之亦然,这是线程安全的。请建议Apache kafka Kafka流:POJO序列化/反序列化,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我们可以使用Kafka Streams中的哪个类/方法将Java对象序列化/反序列化为字节数组,或者反之亦然?下面的链接建议使用ByteArrayOutputStream&ObjectOutputStream,但它们不是线程安全的 还有另一个使用ObjectMapper的选项,ObjectReader(用于线程安全),但它是从POJO->JSON->bytearray转换而来的。看来这是一个广泛的选择。希望检查是否有一种直接的方法将对象转换为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;
}
}
import org.apache.kafka.common.serialization.Serializer;
公共类序列化程序实现序列化程序{
私有类tClass;
public House序列化程序(){
}
@抑制警告(“未选中”)
@凌驾
公共无效配置(映射配置、布尔isKey){
tClass=(类)configs.get(“POJOClass”);
}
@凌驾
公众假期结束(){
}
@凌驾
公共字节[]序列化(字符串主题,T数据){
//要在此处执行的对象序列化
返回null;
}
}
注:卡夫卡版本-0.10.1 想检查是否有直接的方法将对象转换为bytearray 如果可能的话,我建议您考虑使用Confluent模式注册表,但不是必需的。JSON是一个很好的退路,但它“在线路上”占用了更多的空间,因此也可以选择JSON 上面的示例使用从模式文件
src/main/resources/avro
生成一个LogLine类
否则,这取决于您,例如,字符串通常打包为
[(length of string) (UTF8 encoded bytes)]
而布尔值是单个0或1位
哪个是线程安全的
我理解这个问题,但您通常不会在线程之间共享反序列化数据。您可以为每个独立的邮件发送/读取/处理邮件 感谢以上回复。我知道每条消息本身都是Kafka对象的一个单独实例,但为了将其强制转换为Java对象,然后进行序列化/反序列化,我们可能会遇到竞速条件。我希望在上面的类方法“serialize”中有一种将数据值转换为字节数组的方法,Avro/JSON可以为您实现这一点,并且可以跨多种不同的语言使用,而不仅仅是“默认Java对象序列化”。你不需要自己去字节数组。如果使用JSON,只需使用StringSerializer