Storm 1.0.0 正式发布

本贴最后更新于 3194 天前,其中的信息可能已经事过景迁

Apache storm 社区很高兴的宣布版本 1.0.0 稳定已经发布,可以从the downloads page下载。
这个版本是 Apache storm 演变的一个重要的里程碑,包括大量的新特性,可用性和性能方面的改进,其中一些如下。

性能提升

该版本主要亮点之一就是性能较之前的版本有一个巨大的性能提升,Apache Storm 1.0 的性能较之前的版本提升 16 倍,延迟降低了 60%。很显然,拓扑基于不同的使用案例和所依赖外部服务不同,性能差别很大,但大多数情况下,用户可以期待一个 3X 的性能提升比早期版本。

Pacemaker - Heartbeat Server

Pacemaker 是一个可选的 Storm 守护线程,用于处理来自 workers 的心跳。随着 Storm 的集群规模的增大,Zookeeper 会因为来自 workers 的大量心跳写入而成为瓶颈,在 Zookeeper 尝试保持一致性的同时,会产生大量的写磁盘操作和网络传输量。

因为心跳是一个短暂的性质,他们不需要持久化到磁盘或跨节点同步,存储在内存中即可。这正是 Pacemaker 的作用,Pacemaker 的功能与简单的基于内存的键/值对存储一样,目录式键和字节数组值。

分布式缓存 API

在过去,它是常见的,开发人员需要的将资源(如查找数据,机器学习模型等)打包成一个 topology 的 jar 文件。这种方法的问题是,更新数据需要重新打包和重新部署的拓扑结构。另一个问题是,有时数据可能非常大(千兆字节或更多),其负面影响拓扑的启动时间。

Storm 1.0 版本引入了分布式缓存 API,允许文件在拓扑结构之间共享(BLOBs)。在分布式缓存中,文件可以在命令行的任何时间更新,而不需要重新部署拓扑。分布式缓存 API 允许文件从几个 kb 大小的几个 GB,也支持压缩格式,如 ZIP,GZIP。

Storm 1.0 配备了两个实现分布式缓存 API:一个主管节点的本地文件系统的支持,和一个由 Apache Hadoop HDFS 支持。同时还支持实施细粒度的访问控制,通过 ACL。

HA Nimbus

使用过 Storm 用户知道 Storm Nimbus 服务存在单点故障问题(Nimbus 节点挂掉之后,不会影响正在运行的 topology),然而,Nimbus 节点挂掉之后,不能提交新的 topology 和重新分配任务。

Storm 1.0 解决了这个问题,通过在集群中运行多个 Nimbus 实例和在 Nimbus 节点挂掉之后按照 leader 选举机制选举新的 Nimbus 节点,Nimbus 节点可以在任何时间加入和离开集群。HA Nimbus 利用分布式缓存 API 复制来保证在 Nimbus 节点宕机时 topology 资源可用 。

原生的流式窗口 API

基于窗口型的计算在流式处理中被广泛使用,在流处理中,无限的数据量基于一些标准(比如时间)被划分成有限的数据集,一个计算被施加到一个组,有一个例子是计算出热门的话题。

窗口主要被用来做聚合,拼接,模式匹配等,窗口被视为 in-memory 表,可以被用于事件的添加和删除。

在过去的版本中,Storm 依靠开发者自己开发窗口逻辑,没有一个高层次抽象推荐给开发者使用。

Apache Storm 1.0 现在包括一个本地的窗口 API。窗口可以指定以下 2 个参数,
窗口长度:窗口的长度或持续时间
滑动间隔:窗口滑动的时间间隔

Storm 支持基于时间宽度或事件计数的滑动和滚动窗口。

状态管理--带有自动检查点的有状态 bolt

Storm 1.0 引入了一个新的带有自动检查点有状态的 bolt API,有状态的 bolt 很容易实现(只要继承 BaseStatefulBolt 类即可),可以和 topology 中的无状态 bolt 结合。Storm 自动的管理 bolt 的状态和恢复在事件中失败的状态。

Storm 1.0 自带状态实现,支持 redis,未来发布的版本中将会加入额外的支持状态存储。

自动反压机制

在之前的 Storm 版本中,唯一的限制往 topology 的输入是开启 ACKing 并设置 topology.max.spout.pending。对于一些用户来说,不需要 at-least-once 的处理保证,这样的要求就会造成一个显著的性能损失。

Storm 1.0 包括一个新的基于可配置的高/低水印表示为一个任务的缓冲区大小的百分比自动反压机制。如果高水位达到,Storm 1.0 会减慢拓扑的 spouts 和当低水位时,停止节流。

Storm 的反压机制是实现独立的 Spout API,所以现有的所有 Spouts 都被支持。

资源调度

基于 Storm 可插拔的拓扑调度 API,Storm 1.0 增加了一个新的调度器实现,将内存(堆和堆)和集群中的可用的 CPU 资源考虑在内。资源感知调度器(又名“RAS 调度器”)允许用户指定的内存和 CPU 为每个拓扑组件(Spouts/Bolts),和 Storm 将调度 workers 之间的 tasks 任务以最好地满足这些要求。

在未来,Storm 社区计划扩大 RAS 实现支持网络资源和架意识等。

动态日志级别

Storm 1.0 现在允许用户和管理员可以动态地改变一个运行拓扑的日志级别设置,从 Storm 用户界面以及命令行。用户还可以指定一个可选的超时时间,这些变化将被自动恢复。由此产生的日志文件也很容易通过 Storm 的 UI 和 logviewer 服务来查找。

Tuple 采样与调试

在调试一个拓扑结构的过程中,很多用户发现需要自己加入 Storm“调试”bolts 或 trident 功能,记录有关数据流经的拓扑信息,然后在生产部署时,只能删除或禁用它们。Storm 1.0 消除了种方式。

Storm 的 UI 现在包括一个功能,允许你在从 Storm 的 UI 上取样流经一个拓扑或个别部件的一定百分比的 tuples。采样的事件可以直接在 Strom 的用户界面查看,也可以保存到磁盘。

分布式日志搜索

Storm 的用户界面的另一个改进是添加一个分布式日志搜索。这个搜索功能允许用户搜索在特定拓扑的所有日志文件,包括归档日志(以 zip 结尾的)。搜索结果将包括来自所有 Supervisor 节点的匹配结果。

动态 Worker 分析

最后,但肯定不是最不重要的,在 Storm 1.0 的可用性改进是动态的 worker 分析。这个新功能允许用户直接从 Storm 用户界面请求数据,包括:
堆转储
JStack 输出
JProfile 记录

生成的文件,然后可供下载使用各种调试工具离线分析。现在还可以在 Storm 的用户界面重启 worker。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 227 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 316 关注
  • OneDrive
    2 引用
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    239 引用 • 224 回帖 • 1 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    179 引用 • 408 回帖 • 489 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    161 引用 • 307 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 666 关注
  • OneNote
    1 引用 • 3 回帖 • 1 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    245 引用 • 1338 回帖
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    28 引用 • 226 回帖 • 134 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 5 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 488 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    12 引用 • 54 回帖 • 167 关注
  • 安全

    安全永远都不是一个小问题。

    203 引用 • 818 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    53 引用 • 40 回帖
  • 印象笔记
    3 引用 • 16 回帖
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    133 引用 • 1124 回帖 • 117 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖 • 1 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    89 引用 • 122 回帖 • 619 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 9 关注