storm原理写得比较好的文章

 Storm拥有低延迟、高性能、分布式、可扩展、容错等特性,能够保证消息不丢失,消息处理严格有序。Storm的主要特色以下所示:数据库

    • 简单的编程模型。相似于MapReduce下降了并行批处理复杂性,Storm下降了进 行实时处理的复杂性。
    • 可使用各类编程语言。你能够在Storm之上使用各类编程语言。默认支持Clojure、 Java、Ruby和Python。要增长对其余语言的支持,只需实现一个简单的Storm通讯协议便可。
    • 容错性。Storm会管理工做进程和节点的故障。
    • 水平扩展。计算是在多个线程、进程和服务器之间并行进行的。
    • 可靠的消息处理。Storm保证每一个消息至少能获得一次完整处理。任务失败时,它 会负责从消息源重试消息。
    • 快速。系统的设计保证了消息能获得快速的处理,使用ØMQ做为其底层消息队列。
    • 本地模式。Storm有一个“本地模式”,能够在处理过程当中彻底模拟Storm集群。 这让你能够快速进行开发和单元测试。

  Storm集群由一个主节点多个工做节点组成。主节点运行了一个名为“Nimbus”的守护进程,用于分配代码、布置任务及故障检测。每一个工做节点都运行了一个名为“Supervisor”的守护进程,用于监听工做,开始并终止工做进程。Nimbus和Supervisor都能快速失败,并且是无状态的,这样一来它们就变得十分健壮,二者的协调工做是由Apache ZooKeeper来完成的。编程

    

  

  图1.1 Storm工做流程服务器

  第一步:客户端提交拓扑到Nimbus。第二步:Nimbus针对该拓扑创建本地的目录根据topology的配置计算task,分配task,在zookeeper上创建assignments节点存储task和supervisor机器节点中woker的对应关系。第三步:在zookeeper上建立taskbeats节点来监控task的心跳,启动topology。第四步:Supervisor去zookeeper上获取分配的tasks,启动多个woker进行,每一个woker生成task,一个task一个线程;根据topology信息初始化创建task之间的链接;Task和Task之间是经过ZeroMQ管理的;后整个拓扑运行起来。网络

  Storm的术语包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。Stream是被处理的数据。Sprout是数据源。Bolt处理数据。Task是运行于Spout或Bolt中的线程。Worker是运行这些线程的进程。Stream Grouping规定了Bolt接收什么东西做为输入数据。数据能够随机分配(术语为Shuffle),或者根据字段值分配(术语为Fields),或者 广播(术语为All),或者老是发给一个Task(术语为Global),也能够不关心该数据(术语为None),或者由自定义逻辑来决定(术语为Direct)。Topology是由Stream Grouping链接起来的Spout和Bolt节点网络。编程语言

  能够和Storm相提并论的系统有Esper、Streambase、HStreaming和Yahoo S4。其中和Storm最接近的就是S4。二者最大的区别在于Storm会保证消息获得处理。这些系统中有的拥有内建数据存储层,这是Storm所没有的,若是须要持久化,可使用一个相似于Cassandra或Riak这样的外部数据库。分布式

相关文章
相关标签/搜索