Apache Storm中的自定义序列化

时间:2015-11-15 13:32:11

标签: java serialization apache-storm kryo

我尝试为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序列化器进行斑点/螺栓序列化?

2 个答案:

答案 0 :(得分:1)

我必须将以下配置添加到我的拓扑中才能让Storm使用我自己的序列化逻辑:

config.put(Config.TOPOLOGY_FALL_BACK_ON_JAVA_SERIALIZATION, true);

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

答案 1 :(得分:1)

看起来Storm并不支持Kryo进行螺栓或喷口的序列化。请参阅this line,它显式尝试使用Java序列化进行序列化。