`
linc09
  • 浏览: 8510 次
文章分类
社区版块
存档分类
最新评论

【转】使用Storm处理事务型实时计算需求时的几处难点

 
阅读更多
http://blog.sina.com.cn/s/blog_6ff05a2c0101ficp.html

接触流计算领域不长时间,对这个领域可以说还是个门外汉。最近在做实时计算相关的应用,简单说下自己的感受,以后再展开来讨论。
比流量或者订单淘宝可以把我们甩出几条大街。淘宝的兄弟可以自豪地说他们的实时应用已经承受住了双十一全世界范围内最大的单日数据流的冲击。而阿里巴巴中文站的流量和订单与淘宝相比则少的可怜。同时B2B自身业务又存在不同的特点,我们的客单价和笔单价要高得多,因此对于实时数据的误差是零容忍的(比如丢了一个几百万的单子,那实时数据就没有参考价值了)。
所以中文站的实时应用的特点是零误差,事务性,故障可恢复。
在开发实时应用的过程中,我发现当实时计算需要保证数据完全不出错的时候,逻辑就变得复杂起来。效率和精度本身就是不可兼得的。
1、假设实时应用在运行的过程中服务器突然宕机,或者应用需要重启。当应用重新启动时要能够载入应用停掉时刻的状态。虽然我使用的Storm框架可以保证数据流的失败重发,但是数据计算的一些中间状态还是必须要持久化下来。例如计算UV,如果不持久化保存会员ID或cookie ID,就无法做去重处理并得到最终的UV。而流计算一旦要做涉及到磁盘I/0的持久化操作,效率必然会大打折扣。
2、持久化操作带来的另一个难点是保证事务性。例如我们要将数据写入到数据库,当写入多个表时一定要保证多表的数据同时commit,否则当应用异常中断重新从数据库中载入中间状态数据时,由于数据库中的数据不一致就会导致最终计算结果的错误。当然,对于传统关系型数据库来说保证事务性是小菜一碟,但是对于一些分布式数据库或者NOSQL数据库(例如Hbase)来说保证事务性并非易事甚至是做不到的。
3、当数据量大到一定程度时就要使用并发,当并发需要考虑容错与事务性时处理逻辑又会变得复杂起来。在Storm中,每个bolt可以启动多个task,每一个task会有一个唯一的task ID。当需要持久化操作时,每个task必须把自己的中间状态连带自己的task ID一起持久化下来,而在故障恢复时,每个task只从数据库中读取属于自己的状态数据,否则很容易导致内存溢出。再加上有些业务逻辑要求多个task的数据必须在数据库中一起commit,这又增加了复杂性。
4、如果在使用并发时想动态地调整并发数,那需要增加很多额外的处理逻辑。因为Storm默认的fieldsGrouping是根据并发数进行Hash计算取模。如果并发数变动,那么每个数据流应该分配到哪个task中也就发生了变动。在故障恢复时,如果并发数发生了变化,每个task的task ID也会发生变化,这会导致一个task从数据库中读取不到本来属于自己的那部分中间状态数据。这时需要采用一致性Hash策略来解决该问题。
5、Storm处理事务性应用时是按照batch来接收和处理数据的。当一批数据跨在两天的交界处时,一批数据中既有前一天的数据,又有后一天的数据。如果应用是按天为维度来计算的,就要保证不能把前一天的数据算在后一天里面,也不能把后一天的数据算在前一天里。例如计算一天的GMV,理论上讲,因为数据存在延迟,当bolt接收到第二天的订单数据时,自己的服务器时间也应该是第二天。但是有可能不同的服务器时间存在误差,一个bolt有可能接收到在自己看来不是当天而实际上是当天的订单,这在程序处理时也应该考虑,否则就无法保证数据零误差。
总之,阿里巴巴中文站的特点是流量与订单量小,但是客单价与笔单价大,实时计算如果不能保证数据准确性,计算结果与实际结果将产生比较大的误差,失去应用价值。为了保证数据准确性,就要牺牲一定的性能。同时,B2B的业务与市场正在迅速地发展,流计算所需要处理的数据流也会成倍地增长,因此我们必须不断寻求与优化算法与策略,在精度与性能两方面把握平衡。
分享到:
评论

相关推荐

    Storm实战构建大数据实时计算

    Storm官方网站有段简介 Storm是一个免费并开源的分布式实时计算系统。利用Storm可以很容易做到可靠地处理无限的数据流,像Hadoop批量处理大数据一样,Storm可以实时处理数据。Storm简单,可以使用任何编程语言。

    Storm 实战:构建大数据实时计算完整版

    随着大数据实时处理需求的强劲增长,Storm的出现填补了大数据处理生态系统的缺失,并被越来越多的公司所采用。阿里巴巴集团数据平台事业部商家数据业务部正是最早使用Storm的技术团队之一。 《Storm实战:构建...

    《Storm实战构建大数据实时计算》PDF

    《Storm实战构建大数据实时计算》是一本专注于大数据领域实时处理技术的专著,主要围绕Apache Storm这一开源流处理系统展开。这本书深入浅出地讲解了如何利用Storm进行实时数据流的处理,为读者揭示了大数据实时计算...

    Storm实时数据处理

    Storm实时数据处理

    Storm实战构建大数据实时计算( 带书签目录 高清完整版)

    《Storm实战构建大数据实时计算》是一本专注于大数据处理领域的专著,主要围绕开源分布式实时计算系统Apache Storm展开。Apache Storm是一个强大的工具,用于处理大规模的数据流处理,它以高吞吐量、容错性以及实时...

    storm流式计算(实时系统)

    总的来说,Storm流式计算与Kafka、Redis相结合,构建了一个强大的实时数据处理平台,能够处理各种实时业务场景,如日志分析、交易处理等,为企业提供了实时决策支持和业务优化的可能性。同时,实时系统中的安全问题...

    Storm实战:构建大数据实时计算

    随着大数据实时处理需求的强劲增长,Storm的出现填补了大数据处理生态系统的缺失,并被越来越多的公司所采用。阿里巴巴集团数据平台事业部商家数据业务部正是最早使用Storm的技术团队之一。  《Storm实战:构建...

    Storm 实战:构建大数据实时计算 PDF带书签完整版

    《Storm实战:构建大数据实时计算》是一本深入探讨Apache Storm技术的专业书籍,旨在帮助读者理解和掌握如何使用Storm进行大数据实时处理。Apache Storm是一个开源的分布式实时计算系统,它能够处理无限的数据流,...

    实时计算Storm核心技术及其在报文系统中的应用.pdf

    报文系统是处理实时消息传递的关键基础设施,通常用于在系统间快速传输大量数据,如交易信息、用户行为数据等。实时处理这些报文对于业务决策、监控和预警至关重要。 2. Storm关键技术 2.1 系统架构 Storm由多个...

    Storm实时数据处理.pdf

    传统的批处理方式无法满足对于实时性的需求,而Storm这样的实时计算框架则能够及时地处理数据并作出响应。例如,在金融领域,交易数据的实时分析可以帮助机构做出快速决策;在社交媒体平台中,实时监控用户活动有助...

    storm实时计算

    ### Storm实时计算框架详解 #### 一、Storm概述 Storm是一种分布式的实时计算框架,能够高效地处理大量的数据...通过对以上关键技术的深入理解和应用,可以更好地发挥Storm的优势,满足日益增长的实时数据处理需求。

    实时计算平台STORM流式数据核心技术与报文系统.pdf

    - **Storm的出现**:为了解决实时处理需求,Twitter在2011年推出了开源项目Storm。它是一款分布式实时计算系统,能够处理海量流式数据,提供低延迟和高可靠性。 2. **Storm关键技术** - **系统架构**:Storm由...

    大数据处理框架:Storm:Storm的实时计算特性.docx

    大数据处理框架:Storm:Storm的实时计算特性.docx

    Storm分布式实时计算在物联网系统中的应用.pdf

    3. **实时处理**:Storm处理数据时不依赖于将数据写入磁盘,从而实现毫秒级的延迟。 4. **流式处理**:数据不断地流入、处理和流出,适合处理连续不断的数据流。 5. **多语言支持**:Storm支持Clojure、Java、Ruby、...

    基于Storm的分布式实时信号处理系统.pdf

    基于Storm的分布式实时信号处理系统是一种利用了Storm这一流式云计算系统进行实时数据处理的架构。Storm系统由Twitter公司开发,它是一个开源的分布式实时计算系统,提供了实时处理数据流的高效平台。Storm系统的...

Global site tag (gtag.js) - Google Analytics