是否可以跨风暴群集共享相同的应用程序上下文?

时间:2017-07-17 12:18:15

标签: java spring apache-storm

Storm序列化/反序列化类字段,但spring上下文不可序列化。在喷嘴/螺栓的准备/退出方法中初始化相同并不能解决问题。

围绕此类情况的最佳做法是什么?您可能希望在群集中使用相同的弹簧上下文?

2 个答案:

答案 0 :(得分:0)

首先,基础知识:

  1. Workers - 运行执行程序,每个worker都有自己的JVM
  2. 执行人员 - 运行任务,每个执行人员分布在各种工作人员之间
  3. 任务 - 运行spout / bolt代码的实例
  4. 将每个工作者视为可以分配执行程序的存储桶。

    首次创建和提交拓扑时,您可以控制喷口/螺栓的实例数量:

    TopologyBuilder builder = new TopologyBuilder();
    builder.setSpout("0-spout", new MySpout(), spoutParallelism).setNumTasks(spoutTasks);
    

    如果您只需要一个整个群集的喷口,则可以将spoutParallelismspoutTasks都设置为1。

    这将允许您控制为消息队列创建的连接数。用于连接的密钥应通过storm配置传递到spout / bolt或在openprepare中动态加载。

答案 1 :(得分:0)

您可以考虑storm-jmsstorm-kafka或其他类似的事情。即使它不完全符合您的需求,它们也可以帮助您了解如何通过良好实践在风暴中编写代码。