Storm rebalance原理及可靠性保证
来源:互联网 发布:最近破获网络涉枪案件 编辑:程序博客网 时间:2024/05/19 20:42
原创文章,转载请注明出处:http://blog.csdn.net/jmppok/article/details/17248131
1.rebalance原理
Storm可以在Topology运行过程中调整其并发度。其原理如下:
4. rebalancing
(1) startup:将状态转换成do-rebalance
(2) kill: 实际上执行的是 kill-transition 方法,将 topology 的状态先改为 killed, 然后经过 kill-time 的时间,将topology remove
(3) do-rebalance: 实际上是重新将任务分配,与初始分配任务不同,它假设所有的任务都是活跃的,所有的端口都不要判断是否需要保留,也就是说所有的任务重新分配,无论某些端口上的任务分配已经满足均衡要求。
具体可参考:Storm中Topology的状态
2.问题
从上面可以看到,rebalance过程中会杀掉topology然后对其进行重新分派。
这样问题就来了,如何保证Topology的可靠性。
即如果用户正在使用该Topology,怎么保证rebalance过程中用户的请求和数据不会丢失?
google之,发现有人遇到了同样的问题:
原文地址:http://osdir.com/ml/java-clojure-storm/2012-03/msg00385.html
3.Storm的可靠性保证
其实Storm本身已经提供了该问题可靠性保证。大致的原理是:
spout发出的所有数据,都有一个acker对其进行追踪,无论处理成功、失败或者超时,都会告知spout。如果spout发现消息处理失败或丢失,则会重新发送该消息。
结合Topology rebalance的过程,首先de-active,这时候topology的状态被保存。未被处理的消息由acker追踪。
当topology重新分配后,spout发现已发出的消息未被处理,则重新发射这些消息。
具体可参照:strom 如何保证可靠性
4.测试
通过一个DRPC Topology进行测试,测试步骤如下:
1)创建一个DRPCTopology,并将其提交到Storm集群中运行;
topology的功能是原封不动的返回请求的String。
2)通过DRPCClient对其进行不间断访问;
DRPCClient通过一个循环0-1000000,发送"1","2","3"...到topology中,获取返回结果后输出(同样是"1","2","3"...)
3)在DRPCClient运行过程中,使用rebalance命令,调整Topology的workerNum和Spout、Bolt的并行数。
4)观察DRPCClient的运行情况,发现reblance过程中,当topology被kill掉时,DRPCClient的请求会出现阻塞,但当topology rebalance
完成后即恢复正常,且输出结果"1","2","3"...连续,无丢失。从而证明Storm具有很好的可靠性。
5)通过观察,大体发现rebalance的时间为10秒左右,这个仅供参考。
- Storm rebalance原理及可靠性保证
- storm保证消息可靠性
- storm如何保证可靠性传输
- Storm容错机制/消息消息可靠性保证
- storm rebalance 命令调整topology并行数及问题分析
- storm rebalance 命令调整topology并行数及问题分析
- Storm——可靠性(ACK原理)
- storm 消息确认机制及可靠性
- storm 可靠性
- asm rebalance 原理
- Storm可靠性及事务性相关设计: Acker及Trident State
- storm架构及原理
- strom 如何保证可靠性
- TCP如何保证可靠性?
- TCP如何保证可靠性
- TCP如何保证可靠性?
- TCP如何保证可靠性
- TCP如何保证可靠性
- 粒子系统
- 《解析极限编程:拥抱变化》读后感
- poi写Excel
- GNU开发
- 一个中心,两个基本点,四大作风,八项注意
- Storm rebalance原理及可靠性保证
- 数据结构_使用二叉堆实现优先队列
- python subprocess Popen (转)
- web服务器nginx和apache的对比分析
- javascript 获取项目根路径(备忘)
- 迷雾中的P2P
- 关于double的精度丢失(不是超于最大,最小值)
- Osqledit 工具使用
- 2013年10月《自然》杂志内容精选