如何在storm中注册kryo序列化程序示例?

v1l68za4  于 2021-06-21  发布在  Storm
关注(0)|答案(2)|浏览(330)

我绝望地试图配置序列化程序示例,以便在我的storm拓扑中使用。
storm文档说明,有两种方法可以注册序列化程序:

1. The name of a class to register. In this case, Storm will use Kryo’s FieldsSerializer to serialize the class. This may or may not be optimal for the class – see the Kryo docs for more details.
2. A map from the name of a class to register to an implementation of com.esotericsoftware.kryo.Serializer.

我想用2。->

Map<String, Object> serializerConfig = new HashMap<String, Object>();
serializerConfig.put(Record.class.getName(), new AvroSerializer(params));
conf.put(Config.TOPOLOGY_KRYO_REGISTER, serializerConfig);

不幸的是,这会导致

Exception in thread "main" java.lang.IllegalArgumentException: Storm conf is not valid. Must be json-serializable

关于拓扑提交。
有人知道怎么做吗(注册序列化程序示例)?
非常感谢你

ql3eal8s

ql3eal8s1#

正如steven magana zook在上面所说的,您希望在配置中注册类。这显然不允许您传入参数,但是如果您查看storm源代码中的serializationfactory.java,您可以看到它解析了序列化程序类的各种可能的构造函数,包括几个包含storm配置的构造函数。你可以把你的参数藏在里面。
所以不是你所希望的,而是你应该能达到同样的目的。

8ehkhllq

8ehkhllq2#

backtype.storm.config类中有一个方法可以注册从序列化程序派生的类。
对于您的示例,请将其放在创建和提交拓扑的main方法中:

// Read in Storm Configuration
Config conf = new Config();
conf.registerSerialization(Record.class, AvroSerializer.class);

相关问题