简介
storm1.0版本的重要功能都在1.0.0版本中发布,1.0.1版本中以fixed bug为主,调研使用1.0.1版本.
storm1.0.0 :http://storm.apache.org/2016/04/12/storm100-released.html
默认配置:https://github.com/apache/storm/blob/v1.1.0/conf/defaults.yaml
集群配置:http://storm.apache.org/releases/current/Setting-up-a-Storm-cluster.html
运行任务:http://storm.apache.org/releases/current/Running-topologies-on-a-production-cluster.html
Pacemaker
默认情况下使用zookeeper来存储心跳信息,需要修改配置。
storm.cluster.state.store "org.apache.storm.pacemaker.pacemaker_state_factory"
参考资料: https://storm.apache.org/releases/1.0.1/Pacemaker.html
官方性能指标
1、max 270 supervisor
2、2000-3000 nodes (max:6000nodes)
3、70% CPU、1G RAM (4core、24GRAM)
容错
1、pacemaker 挂掉:worker继续运行
2、网络分区(脑裂):与nimbus+pacemaker在同一侧的worker继续运行,另一侧重新分配。
测试Case
1、直接关闭Pacemaker,180分钟后重新启动pacemaker
结果:任务继续运行,期间没有发生飘移,一直尝试重试。
现场分析:
Nimbus与Worker一直尝试连接pacemaker。
重试策略采用:PacemakerClient.StormBoundedExponentialBackoffRetry【有限指数退避重试策略】
2、将其中一台机器的网卡数据拦截(脑裂),持续5-10分钟
HA Nimbus
HA 机制
1、Leader选举:通过curator提供的分布式锁来实现,谁获取锁谁是Leader。com.netflix.curator.framework.recipes.locks.InterProcessMutex
2、Topology codes:异步线程(Timer)检测本地不存在的任务代码,通过RPC向当前Leader下载任务代码。
3、Nimbus Leader:StormSubmitter,Supervisor,Non-leader Nimbus and Storm UI 角色通过zookeeper获取Nimbus Leader地址。
参考资料: https://github.com/apache/storm/pull/61
测试Case
1、直接停掉Nimbus Leader
结果:正在运行的任务没有飘移情况。
2、启动任务后,立刻停掉Nimbus Leader
结果:任务启动失败
3、storm kill 任务后,立刻停掉Nimbus Leader
结果:任务关闭失败,任务一直处于KILLED状态【僵尸任务,不执行】。
重启全部nimbus任务停止。
4、storm kill 任务后,过30秒[延迟任务关闭时间,可以配置,建议保持30],立刻停掉Nimbus Leader
结果:任务关闭成功。
5、关闭worker所在机器的supervisor进程(默认3秒检测一次worker进程)--> Kill -9 $workerPid ---> 关闭Nimbus Leader --->worker没有重新启动/飘走-->1分钟后启动supervisor --->worker飘移走
结果:worker成功飘移。
Automatic Backpressure
反压机制
1、worker executor的接收队列大于高水位,通知反压线程
2、worker反压线程通知zookeeper,executor繁忙事件
3、所有worker监听zookeeper executor繁忙的事件
4、worker spouts降低发送tuple速度
参考资料: https://github.com/apache/storm/pull/700
https://issues.apache.org/jira/browse/STORM-886
测试Case
1、基数分钟,前8秒,bolt处理消息逻辑sleep(1ms), spout一直全力发送数据。
topology.backpressure.enable: false
backpressure.disruptor.high.watermark: 0.9
backpressure.disruptor.low.watermark: 0.4
topology.max.spout.pending: null [默认值1]
结果:触发高水位,执行反压,经过几次反压,任务永久组塞,可以确认[bolt消息处理量==spout消息发送量]
2、bolt的TickTuple TOPOLOGY_TICK_TUPLE_FREQ_SECS设置为10秒,bolt处理逻辑为Utils.sleep(100ms),spout一直全力发送数据。
backpressure.disruptor.high.watermark 0.9
backpressure.disruptor.low.watermark 0.4
topology.max.spout.pending 1000
结果:触发高水位,执行反压,反复执行反压,任务正常。
Native Streaming Window API
storm 1.0.X支持在窗口里处理一组tuple,窗口需要给定两个参数:窗口长度和滑动间隔。窗口计算的典型例子是可用于计算过去一小时最热门的Twitter话题
storm提供两种类型的窗口:
Sliding Window:一组Tuple被包含在一个窗口里,随着滑动间隔窗口不断滑动。一个tuple可能属于多个窗口。
Tumbling Window:一组Tuple被包含在单独一个基于时间或Tuple个数的窗口里,任意一个Tuple仅属于一个窗口。
用户使用窗口计算时需要继承BaseWindowedBolt类。
测试case
滑动窗口main方法
滑动窗口slide类
滑动窗口
Dynamic Log Levels
Storm 1.0允许用户和管理员通过Storm UI和命令行来更改运行中的Topology的日志级别的设置。用户可以指定一个可选的超时时间,超时时间过后,这些更改将被自动恢复。生成的日志文件也可以通过Storm UI和logviewer服务很容易的被搜索到。
测试Case
1.配置/Storm_home/log4j2/worker.xml,用户可以自定义Logger,
<RollingFile name="CUSTOM" immediateFlush="false" fileName="${sys:storm.log.dir}/custom.log" filePattern="${sys:storm.log.dir}/custom.log.%i.gz"> <PatternLayout> <pattern>${pattern}</pattern> </PatternLayout> </RollingFile> <Logger name="custom" level="warn" additivity="false"> /*自定义一个名为“custom”、warn级别的Logger,输出日志到custom.log文件中*/ <AppenderRef ref="CUSTOM"/> </Logger>
2.Topology业务类中测试代码如下:
Logger logger=LoggerFactory.getLogger("custom"); logger.trace("trace........"); logger.debug("debug........"); logger.info("info.........."); logger.warn("warn.........."); logger.error("error........");
3.在Topology UI界面进行操作
这里对Log Level作如下说明:
Level | 描述 |
ALL | 各级包括自定义级别 |
TRACE | 指定细粒度比DEBUG更低的信息事件 |
DEBUG | 指定细粒度信息事件是最有用的应用程序调试 |
INFO | 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息 |
WARN | 指定具有潜在危害的情况 |
ERROR | 错误事件可能仍然允许应用程序继续运行 |
FATAL | 指定非常严重的错误事件,这可能导致应用程序中止 |
OFF | 这是最高等级,为了关闭日志记录 |
它们的级别关系是All<Trace<Debug<Info<Warn<Error<Fatal<Off。
4.测试结果分析
事例中未使用动态Level时,custom.log中只打印出warn级别以上的信息,设置Level为info、Timeout为60时,打印出info、warn、error级别的信息,60秒后回归到原始级别状态。
UI界面上的“clear”按钮则用于清除这个Logger,不再打印日志信息。
Tuple Sampling and Debugging
在调试Topology的过程中,很多Strom用户添加了“debug”Bolt或者Trident功能,以记录流经Topology的数据信息,在生产部署的时候移除或者禁用它们。如今Storm UI包含这一功能,可以使你直接通过Storm UI对流经Topology或者单个组件的数据进行取样。被取样的事件可以通过Storm UI直接观察到,并被保存到磁盘。
使用说明
1.由于轻微的性能消耗,Storm默认没有开启这项功能,可以在cronf/storm.yaml中进行参数配置。
Parameter | Meaning | When to use |
topology.eventlogger.executors: 0 | No event logger tasks are created (default). | |If you don’t intend to inspect tuples and don’t want the slight performance hit. |
topology.eventlogger.executors: 1 | One event logger task for the topology. | If you want to sample a low percentage of tuples from a specific spout or a bolt. This could be the most common use case. |
topology.eventlogger.executors: nil | One event logger task per worker. | If you want to sample entire topology (all spouts and bolt) at a very high sampling percentage and the tuple rate is very high. |
Distributed Log Search
这是一个分布式日志搜索功能,用户通过Storm UI界面可以在指定Topology的所有日志文件中进行搜索,包括存档日志。搜索结果包含来自所有Supervisor节点的匹配。
在Storm UI首页点击指定的Topology Name后,在页面上方搜索框中输入关键词搜索即可。或者点击首页右上角的搜索图标,输入Topology ID和关键词后即可搜索。
Dynamic Worker Profiling
Storm 1.0最后一个改进是动态worker剖析。这个新功能可以让用户直接从Storm UI获取worker剖析数据,包括:
Heap Dumps
JStack Output
JProfile Recordings
生成的文件,可以下载,使用各种调试工具离线分析,storm1.0.x可以通过Storm UI重启worker。
相关推荐
2. **配置 `storm.yaml` 文件**:此文件位于 `storm-1.0.1/conf/` 目录下,是整个集群的核心配置文件。主要需要配置的内容包括: - `storm.zookeeper.servers`: 设置 Zookeeper 集群的地址。 - `storm.local.dir`:...
妳那伊抹微笑_云计算之ClouderaManager以及CHD5.1.0集群部署安装文档V1.0.docx 该文档与教程http://blog.csdn.net/u012185296/article/details/38084107 配套使用的,主要讲的是妳那伊抹微笑_云计算之Cloudera...
**PyPI 官网下载 | swmmtoolbox-1.0.5.8.tar.gz** PyPI(Python Package Index)是Python编程语言的官方软件仓库,它提供了大量的第三方库供开发者下载和使用。在这个场景中,我们关注的是名为"swmmtoolbox-1.0.5.8...
- **新消费者API**:0.10.1.0版本引入了新的消费者API,提供了更高级别的抽象,简化了消费者编程模型,支持自动分区平衡和幂等性写入。 - **幂等性生产者**:幂等性生产者确保即使在重试或网络故障后,消息也...
该文档对storm1.1.x ui进行了详细的说明,方便开发人员进行storm监控管理。 这个文档是我及用Typora编写,是一个md文件,所以建议使用Typora打开,当然,其它Macdown编辑器也支持
Kubernetes is taking the app development world by storm. Already, 77% of companies with more than 1,000 developers that run Kubernetes are using it in production.1 Kubernetes is shaping the future of ...
大数据 storm
StormPlayer.exe g
标题中的"NSUN.Storm.4.v1.0-v1.07.Plus.15Tr.rar"可能指的是一个软件的版本信息,其中"NSUN"可能是软件的名称,"Storm"可能是该软件系列的一个特色或者代号,版本号从"v1.0"到"v1.07"表示这是一个逐步更新的软件,...
Storm.dll是某些应用程序或者游戏的重要组件,它包含了执行特定功能的代码和数据。 描述中的“完美解决丢失storm.dll的问题”提供了修复该问题的具体步骤。首先,用户需要下载包含Storm.dll文件的压缩包。下载完成...
在实现这些目标的过程中,需要一套完善的技术基础设施,包括但不限于大数据处理框架(如Hadoop和Spark)、流处理技术(如Storm和Spark Streaming)、实时分析工具、数据仓库和分析型应用,以及基于机器学习的工业...
获取到文件名称 : apache-storm-0.9.2-incubating.tar.gz 获取到文件名称 : Learning Storm [eBook].pdf 获取到文件名称 : Storm Blueprints.Patterns.pdf 获取到文件名称 : storm01.rar 获取到文件名称 : storm...
【标题】"StormDemo.tar.gz" 是一个与Apache Storm相关的压缩包文件,它提供了一个入门级别的示例,帮助用户理解并开始使用这个分布式实时计算系统。Apache Storm是一个开源的流处理框架,它允许开发者处理和分析...
1. `bin` 目录:包含了启动、停止 Storm 服务的脚本,如 `storm.sh` 和其他管理工具。 2. `conf` 目录:存放配置文件,例如 `storm.yaml`,用户可以根据自己的需求进行修改。 3. `lib` 目录:包含 Storm 及其依赖的...
智能手机用的电影文件,手机现在都用智能的啦,电影多为FLV格式的啦
### Hadoop2.X 新特性详解 #### Hadoop1.0 的局限性 Hadoop1.0作为初代的大数据处理框架,在数据存储和处理方面取得了显著成就,但也暴露出了一系列问题,主要包括: - **HDFS(Hadoop Distributed File System)...
Storm是一个分布式实时计算系统,能够有效地处理大量数据流。它由Twitter公司开发,最初的目的是为了处理大规模的数据,如社交网络上的实时信息更新。Storm的基本单位是“topology”(拓扑结构),它可以理解为一个...
StormPlayer.ex
这些类通常会继承自`backtype.storm.topology.TopologyBuilder`,并使用`spout`和`bolt`来定义数据处理逻辑。 - `main/resources`:可能包含配置文件,如Storm配置(storm.yaml)或其他应用特定的资源。 - `test/...
But it quickly dives into real-world case studies that will bring the novice up to speed with productionizing Storm. About the Technology It's hard to make sense out of data when it's coming at you ...