我尝试为Apache Storm Spouts / Bolts中使用的Objects添加自定义序列化程序。现在我的代码看起来像这样:
conf.registerSerialization(MyService.class, MyKryoSerializer.class);
public class MyKryoSerializer extends Serializer<MyService> {
public MyKryoSerializer() {
System.out.println("New MyKryoSerializaer!");
}
@Override
public void write(Kryo kryo, Output output, MyService service) {
System.out.println(72);
}
@Override
public MyService read(Kryo kryo, Input input, Class<MyService> aClass) {
System.out.println(73);
return null;
}
public MyService copy(Kryo kryo, MyService myService) {
System.out.println("MyService!");
return myService;
}
}
public class MyRandomSpout extends BaseRichSpout {
private MyService service;
private SpoutOutputCollector collector;
...
因此,当我尝试在本地群集上启动Storm拓扑时,我将在"New MyKryoSerializaer!"
中看到stdout
,因此调用构造函数,但不调用write / read方法。谁能告诉我,我错了什么?
Storm是否支持Skyo序列化器进行斑点/螺栓序列化?
答案 0 :(得分:1)
我必须将以下配置添加到我的拓扑中才能让Storm使用我自己的序列化逻辑:
config.put(Config.TOPOLOGY_FALL_BACK_ON_JAVA_SERIALIZATION, true);
其中config是我最终传递给submit方法的配置。
答案 1 :(得分:1)
看起来Storm并不支持Kryo进行螺栓或喷口的序列化。请参阅this line,它显式尝试使用Java序列化进行序列化。