Java apachestorm中的自定义序列化

Java apachestorm中的自定义序列化,java,serialization,apache-storm,kryo,Java,Serialization,Apache Storm,Kryo,我尝试为我的对象添加自定义序列化程序,这在Apache Storm Spouts/Bolts中使用。现在,我的代码如下所示: conf.registerSerialization(MyService.class, MyKryoSerializer.class); public class MyKryoSerializer extends Serializer<MyService> { public MyKryoSerializer() { System.o

我尝试为我的对象添加自定义序列化程序,这在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;

...
conf.registerSerialization(MyService.class、MyKryoSerializer.class);
公共类MyKryoSerializer扩展序列化程序{
公共MyKryoSerializer(){
System.out.println(“新Mykryoserializer!”);
}
@凌驾
公共无效写入(Kryo Kryo、输出、MyService服务){
系统输出打印项次(72);
}
@凌驾
公共MyService读取(Kryo Kryo,输入,类aClass){
系统输出打印项次(73);
返回null;
}
公共MyService副本(Kryo Kryo,MyService MyService){
System.out.println(“MyService!”);
返回myService;
}
}
公共类MyRandomSpout扩展了BaseRichSpout{
私人MyService服务;
私人管道出口收集器;
...
因此,当我尝试在本地集群上启动Storm topology时,我将在stdout中看到
中的
“New MyKryoserializer!”
,因此调用构造函数,但不调用写/读方法。有谁能告诉我,我错在哪里?
Storm是否支持Skyo serializer进行Spot/Bolt序列化?

为了让Storm使用我自己的序列化逻辑,我必须在拓扑中添加以下配置:

config.put(Config.TOPOLOGY_FALL_BACK_ON_JAVA_SERIALIZATION, true);

其中config是我最终传递给submit方法的配置。

看起来Storm不支持Kryo对螺栓或喷孔进行序列化。请查看它显式尝试使用Java序列化的位置。

它对元组非常有效,但喷孔/喷孔等仍然由Java序列化程序进行序列化。Storm支持吗喷口/螺栓的Kryo系列化器?