1.概述

  在《Kafka实战-实时日志统计流程》一文中,谈到了Storm的相关问题,在完成实时日志统计时,我们需要用到Storm去消费Kafka Cluster中的数据,所以,这里我单独给大家分享一篇Storm Cluster的搭建部署。以下是今天的分享目录:

  • Storm简述
  • 基础软件
  • 安装部署
  • 效果预览

  下面开始今天的内容分享。

2.Storm简述

  Twitter将Storm开源了,这是一个分布式的、容错的实时计算系统,已被贡献到Apache基金会,下载地址如下所示:

http://storm.apache.org/downloads.html
  Storm的主要特点如下:
  • 简单的编程模型。类似于MapReduce降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性。
  • 可以使用各种编程语言。你可以在Storm之上使用各种编程语言。默认支持Clojure、Java、Ruby和Python。要增加对其他语言的支持,只需实现一个简单的Storm通信协议即可。
  • 容错性。Storm会管理工作进程和节点的故障。
  • 水平扩展。计算是在多个线程、进程和服务器之间并行进行的。
  • 可靠的消息处理。Storm保证每个消息至少能得到一次完整处理。任务失败时,它会负责从消息源重试消息。
  • 快速。系统的设计保证了消息能得到快速的处理,使用ØMQ作为其底层消息队列。
  • 本地模式。Storm有一个本地模式,可以在处理过程中完全模拟Storm集群。这让你可以快速进行开发和单元测试。
  Storm集群由一个主节点和多个工作节点组成。主节点运行了一个名为“Nimbus”的守护进程,用于分配代码、布置任务及故障检测。每个工作节 点都运行了一个名为“Supervisor”的守护进程,用于监听工作,开始并终止工作进程。Nimbus和Supervisor都能快速失败,而且是无 状态的,这样一来它们就变得十分健壮,两者的协调工作是由Apache的ZooKeeper来完成的。
  Storm的术语包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。Stream是被处理的数据。Spout是数据源。Bolt处理数据。Task是运行于Spout或Bolt中的 线程。Worker是运行这些线程的进程。Stream Grouping规定了Bolt接收什么东西作为输入数据。数据可以随机分配(术语为Shuffle),或者根据字段值分配(术语为Fields),或者广播(术语为All),或者总是发给一个Task(术语为Global),也可以不关心该数据(术语为None),或者由自定义逻辑来决定(术语为 Direct)。Topology是由Stream Grouping连接起来的Spout和Bolt节点网络。在Storm Concepts页面里对这些术语有更详细的描述。

3.基础软件

  在搭建Storm集群时,我们需要有Storm安装包,这里我采用的是Apache 版本的Storm安装包,下载链接如下所示:
  Storm安装包  《下载地址
  ZooKeeper安装包 《下载地址
  在下载完成相关依赖基础软件后,下面我们开始安装部署Storm集群。

4.安装部署

  首先,我们解压相关依赖基础软件,关于ZK的安装环节,这里不做介绍,大家可以参考我写的《配置高可用的Hadoop平台》,里面有详细介绍如何安装ZK的步骤,下面重点介绍Storm集群搭建详情。
  • 解压Storm安装包
[hadoop@dn1 ~]$ tar -zxvf apache-storm-0.9..tar.gz
  • 配置环节变量
export STORM_HOME=/home/hadoop/storm-0.9.
export PATH=$PATH:$STORM_HOME/bin
  • 配置Storm配置文件(storm.yaml)
########### These MUST be filled in for a storm configuration
storm.zookeeper.servers:
- "dn1"
- "dn2"
- "dn3"
storm.zookeeper.port: nimbus.host: "dn1" supervisor.slots.ports:
-
-
-
- storm.local.dir: "/home/hadoop/data/storm"

  下面我们来看Storm的角色分配,如下图所示:

  在配置完成相关文件后,我们使用scp命令将文件分发到各个节点,命令如下所示:

[hadoop@dn1 ~]$ scp -r storm-0.9./ hadoop@dn2:~/
[hadoop@dn1 ~]$ scp -r storm-0.9./ hadoop@dn3:~/
  • 启动ZK集群
# 分别在三个节点依次启动zk的服务
[hadoop@dn1 ~]$ zkServer.sh start
[hadoop@dn2 ~]$ zkServer.sh start
[hadoop@dn3 ~]$ zkServer.sh start
  • 启动集群
# 在nimbus节点启动nimbus服务
[hadoop@dn1 ~]$ storm nimbus &
#在supervisor节点分别启动supervisor服务
[hadoop@dn2 ~]$ storm supervisor &
[hadoop@dn3 ~]$ storm supervisor &
  • 启动Storm UI
[hadoop@dn1 ~]$ storm ui &
  • 查看启动进程
[hadoop@dn1 storm-0.9.]$ jps
Jps
core
QuorumPeerMain
nimbus
[hadoop@dn2 storm-0.9.]$ jps
worker
worker
QuorumPeerMain
worker
supervisor
Jps
[hadoop@dn3 storm-0.9.]$ jps
QuorumPeerMain
supervisor
Jps

5.效果预览

  由于,集群我做过测试,提交过Topology,所以截图中会有提交记录,从上面的dn2节点的进程中也可以看出,有相应的worker进程,若是首次安装,未提交任务是不会有对应的显示的,下面附上Storm UI中相关的截图预览,如下图所示:

6.总结

  这就是本篇为大家介绍的Storm Cluster的搭建部署,从上面的Storm的分布图中我们可以细心的发现,Storm的分布存在单点问题,国外已经有Storm HA版本,不过这个非官方版本,目前Storm提供了一些机制来保证即使在节点挂了或者消息被丢失的情况下也能正确的进行数据处理,可以参考官方给出的解决方案,地址如下所示:

http://storm.apache.org/documentation/Guaranteeing-message-processing.html

7.结束语

  这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

Kafka实战-Storm Cluster的更多相关文章

  1. Kafka实战-Kafka到Storm

    1.概述 在<Kafka实战-Flume到Kafka>一文中给大家分享了Kafka的数据源生产,今天为大家介绍如何去实时消费Kafka中的数据.这里使用实时计算的模型——Storm.下面是 ...

  2. Kafka实战-Kafka Cluster

    1.概述 在<Kafka实战-入门>一篇中,为大家介绍了Kafka的相关背景.原理架构以及一些关键知识点,本篇博客为大家来赘述一下Kafka Cluster的相关内容,下面是今天为大家分享 ...

  3. Kafka实战-数据持久化

    1.概述 经过前面Kafka实战系列的学习,我们通过学习<Kafka实战-入门>了解Kafka的应用场景和基本原理,<Kafka实战-Kafka Cluster>一文给大家分享 ...

  4. Kafka实战-实时日志统计流程

    1.概述 在<Kafka实战-简单示例>一文中给大家介绍来Kafka的简单示例,演示了如何编写Kafka的代码去生产数据和消费数据,今天给大家介绍如何去整合一个完整的项目,本篇博客我打算为 ...

  5. Kafka实战-Flume到Kafka

    1.概述 前面给大家介绍了整个Kafka项目的开发流程,今天给大家分享Kafka如何获取数据源,即Kafka生产数据.下面是今天要分享的目录: 数据来源 Flume到Kafka 数据源加载 预览 下面 ...

  6. 【转】Kafka实战-Flume到Kafka

    Kafka实战-Flume到Kafka Kafka   2015-07-03 08:46:24 发布 您的评价:       0.0   收藏     2收藏 1.概述 前面给大家介绍了整个Kafka ...

  7. 5 kafka整合storm

    本博文的主要内容有 .kafka整合storm   .storm-kafka工程  .storm + kafka的具体应用场景有哪些? 要想kafka整合storm,则必须要把这个storm-kafk ...

  8. SpringBoot整合Kafka和Storm

    前言 本篇文章主要介绍的是SpringBoot整合kafka和storm以及在这过程遇到的一些问题和解决方案. kafka和storm的相关知识 如果你对kafka和storm熟悉的话,这一段可以直接 ...

  9. Kafka实战分析(一)- 设计、部署规划及其调优

    1. Kafka概要设计 kafka在设计之初就需要考虑以下4个方面的问题: 吞吐量/延时 消息持久化 负载均衡和故障转移 伸缩性 1.1 吞吐量/延时 对于任何一个消息引擎而言,吞吐量都是至关重要的 ...

随机推荐

  1. webapi postman 415 错误

    https://blog.csdn.net/Intangible_moon/article/details/80183121 猜测:如果后台接口使用的是[fromBody]标签的话,需要使用raw方式

  2. 6C - 开门人和关门人

    每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签 到.签离记录,请根据记录找出当天开门和关门的人.  Input 测试输入的第一行给出记录的总天数N ( > 0 ...

  3. vi/vim 文字处理器常用命令

    目录 vi 与vim vi 的三种模式 vi 光标移动 vi 搜索与替换 vi 删除 vi 复制 vi 粘贴 vi 其他 vi 进入编辑模式 vi 命令行命令 vim 附加功能 vi 与vim vi是 ...

  4. CentOS 6.x下wget 下载提示 Unable to locally verify the issuer’s authority 完美解决方案

    CentOS 6.x下wget 下载提示 Unable to locally verify the issuer’s authority 完美解决方案 栏目:Linux 作者:小天 点击: 1,453 ...

  5. MySQL数据查询之多表查询

    多表查询 多表联合查询 #创建部门 CREATE TABLE IF NOT EXISTS dept ( did int not null auto_increment PRIMARY KEY, dna ...

  6. yii框架 隐藏index.php 以及美化URL(pathinfo模式访问)

    首先我们分步骤来: 安装好 yii 以后  我们看到的url地址如下所示: http://www.3w.com/MyApp/backend/web/index.php?r=site%2Flogin 我 ...

  7. python07 函数式编程

    1.作用域 1.1  pass关键字表示,暂时不写该方法 1.2表示返回值为方法 输出结果333 1.3函数作用域:和函数调用没关系,和声明的位置有关系, 结果为444 2.匿名函数 lanmbda ...

  8. jdbc随笔

    通过jdbc连接数据库的基本步骤:  导入jar包驱动类  jdbc语法:jdbc:子协议:厂商内容  对于mysql而言:jdbc:mysql://主机地址:端口号/库名               ...

  9. 网页打印样式CSS

    相信大多数的前端工程师都是处理显示屏上面的设计,用到最多的计量单位就是px,但是有些时候,我们难免也会有打印的需求,比如一个电商平台的“物流配送打印单”,“打印订单”等等可能都是需要从网友上打印出来的 ...

  10. Unity3D连接本地或局域网MySQL数据库

    准备工作: 1.打开 Unity3D 安装目录,到这个路径下 Editor > Data > Mono > lib > mono > 2.0 拷贝出下图的五个动态链接库, ...