apachestorm中的java自定义序列化
我尝试为我的对象添加自定义序列化程序,这在Apache Storm Spouts/Bolts中使用。现在,我的代码如下所示:
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 topology时,我将在stdout
中看到"New MyKryoSerializaer!"
,因此调用构造函数,但不调用写/读方法。谁能告诉我,我做错了什么?
Storm是否支持Skyo序列化程序进行斑点/螺栓序列化
# 1 楼答案
为了让Storm使用我自己的序列化逻辑,我必须将以下配置添加到拓扑中:
其中config是我最终传递给submit方法的配置
# 2 楼答案
看起来Storm并没有支持Kryo系列化螺栓或喷嘴。请参阅this line,其中它显式地尝试使用Java序列化进行序列化