该项目允许您实时组织各种事件的保证处理。 例如,Storm可用于实时分析数据流、运行机器学习任务、组织连续计算、实现RPC、ETL等。 系统支持集群、创建容错配置、有保障的数据处理模式,并且具有高性能,足以在一个集群节点上处理每秒百万级以上的请求。
支持与各种队列处理系统和数据库技术的集成。 Storm 架构涉及使用任意复杂处理器接收和处理非结构化、不断更新的数据流,并且能够在不同的计算阶段之间进行分区。 Twitter 收购了最初开发该框架的公司 BackType 后,该项目被移交给 Apache 社区。 在实践中,Storm 在 BackType 中被用来分析微博中事件的反映,通过动态比较新推文和其中使用的链接(例如,评估 Twitter 上发布的外部链接或公告如何被其他参与者转播) )。
Storm的功能与Hadoop平台相比,主要区别在于数据不存储在仓库中,而是从外部摄取并实时处理。 Storm没有内置存储层,分析查询开始应用于传入数据,直到被取消(而Hadoop使用有限时间的MapReduce作业,Storm使用连续运行“拓扑”的思想)。 处理程序的执行可以分布在多个服务器上 - Storm 自动使用不同集群节点上的线程并行化工作。
该系统最初是用 Clojure 编写的,并在 JVM 虚拟机内运行。 Apache 基金会发起了一项将 Storm 迁移到用 Java 编写的新内核的计划,其结果在 Apache Storm 2.0 版本中提出。 该平台的所有基本组件均用 Java 重写。 保留了对在 Clojure 中编写处理程序的支持,但现在以绑定的形式提供。 Storm 2.0.0需要Java 8。多线程处理模型已经完全重新设计,允许
新版本还提供了新类型的 Streams API,允许您使用函数式编程风格的操作来定义处理程序。 新的 API 在标准基础 API 之上实现,并支持自动合并操作以优化其处理。 用于窗口操作的Windowing API 添加了对后端保存和恢复状态的支持。
支持在做出决策时考虑额外资源,但不限于
CPU 和内存,例如网络和 GPU 设置。 进行了大量改进以确保与平台的集成
Storm的应用领域:
- 实时处理新数据流或数据库更新;
- 连续计算:Storm可以运行连续查询并处理连续流,将处理结果实时交付给客户端。
- 分布式远程过程调用 (RPC):Storm 可用于提供资源密集型查询的并行执行。 Storm 中的作业(“拓扑”)是分布在节点之间的功能,它等待需要处理的消息到达。 函数接收到消息后,在本地上下文中对其进行处理并返回结果。 使用分布式 RPC 的一个示例是并行处理搜索查询或对大量集合执行操作。
风暴特点:
- 简单的编程模型,大大简化了实时数据处理;
- 支持任何编程语言。 模块可用于 Java、Ruby 和 Python,由于通信协议非常简单,只需大约 100 行代码即可支持,因此很容易适应其他语言;
- 容错性:要运行数据处理作业,您需要生成带有代码的jar文件。 Storm将独立地在集群节点上分发这个jar文件,连接与其关联的处理程序,并组织监控。 当作业完成后,该代码将在所有节点上自动禁用;
- 水平可扩展性。 所有计算均以并行模式进行;随着负载的增加,只需将新节点连接到集群即可;
- 可靠性。 Storm 确保每条传入消息至少被完全处理一次。 仅当消息通过所有处理程序时没有错误时,才会处理一次;如果出现问题,则将重复不成功的处理尝试。
- 速度。 Storm 的代码在编写时考虑了高性能,并使用该系统进行快速异步消息传递
零MQ .
来源: opennet.ru