- ### 参考
https://github.com/nathanmarz/storm/wiki/Serialization - ### 原由
storm的部分逻辑会与hadoop的MapReduce共用,MapReduce使用的ProtoBuff,所以希望在storm中能和MapReduce中一样使用ProtoBuff生成的Proto消息类
但是,在storm中使用定义的类,在序列化时默认使用java自带的序列化方法,效力低下。所以尝试使用ProtoBuff的序列化方法注册到storm中。 - ### Serializer
public class ProtoBuffSerializer<T extends GeneratedMessage> extends |
- ### 使用registerSerialization
试着使用registerSerialization注册GeneratedMessage,但发现不起作用,需要每个子类都注册一次,比较麻烦
Config conf = new Config(); |
Config conf = new Config(); |
- ### 使用setKryoFactory
public static class MyKryoFactory extends DefaultKryoFactory { |
这是一个很好的解决办法。
- ### 注意and发现
在LocalCluter中测试时发现当两个Compont(spout or bolt)在同一个worker process中时直接传输对象,不需要序列化传输,
所以,在测试时写了一个Spout(parallelism_hint=1),一个Bolt(parallelism_hint=1),并且conf.setNumWorkers(2),这样spout和bolt会位于不同的worker process中,
观察日志,ProtoBuffSerializer working