有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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序列化程序进行斑点/螺栓序列化


共 (2) 个答案

  1. # 1 楼答案

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

    config.put(Config.TOPOLOGY_FALL_BACK_ON_JAVA_SERIALIZATION, true);
    

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

  2. # 2 楼答案

    看起来Storm并没有支持Kryo系列化螺栓或喷嘴。请参阅this line,其中它显式地尝试使用Java序列化进行序列化