42. 通俗易懂大数据实时计算Storm教程

本文详细介绍了Storm实时计算系统的基础概念、特点、集群架构和核心组件,包括Spout、Bolt、拓扑结构等。通过一个单词计数的Demo,展示了Storm的使用方法,并探讨了并行度和流分组策略。此外,还提到了Storm集群的部署与运行拓扑作业的步骤,帮助读者深入理解并掌握Storm实时计算。
摘要由CSDN通过智能技术生成

前言

  1. 接下来热数据的处理,缓存雪崩问题的解决 --> stormhystrix

对于这两个技术,都是关键性的会去影响你的热数据,缓存雪崩时的系统可用性和稳定性,学以致用,用到我们之前搭建的缓存系统架构中。

  1. storm,在做热数据这块,如果要做复杂的热数据的统计和分析,亿流量,高并发的场景下,最合适的技术就是storm
  2. hystrix,分布式系统的高可用性的限流,熔断,降级,还有缓存雪崩的方案,限流的技术

Storm基础

Storm到底是什么

mysql,hadoop与storm关系

在这里插入图片描述

  1. mysql:事务性系统,面临海量数据的尴尬
  2. hadoop:离线批处理,今天数据,明天计算
  3. storm:实时计算,来一条,计算结果

自己搞一套storm?

  1. 如果自己搞一套实时流系统出来,也是可以的,但是。。。。
  • 花费大量的时间在底层技术细节上:如何部署各种中间队列,节点间的通信,容错,资源调配,计算节点的迁移和部署,等等
  • 花费大量的时间在系统的高可用上问题上:如何保证各种节点能够高可用稳定运行
  • 花费大量的时间在系统扩容上:吞吐量需要扩容的时候,你需要花费大量的时间去增加节点,修改配置,测试,等等
  1. 国内,国产的实时大数据计算系统,唯一做得影响力特别大,特别牛逼的,就是JStorm,阿里国内顶尖
  2. JStorm,clojure编程预压,Java重新写了一遍,Galaxy流式计算的系统,百度,腾讯,也都自己做了,也能做得很好
  3. 普通公司非常困难的…

storm的特点

  1. 支撑各种实时类的项目场景:实时处理消息以及更新数据库,基于最基础的实时计算语义和API(实时数据处理领域);对实时的数据流持续的进行查询或计算,同时将最新的计算结果持续的推送给客户端展示,同样基于最基础的实时计算语义和API(实时数据分析领域);对耗时的查询进行并行化,基于DRPC,即分布式RPC调用,单表30天数据,并行化,每个进程查询一天数据,最后组装结果

  2. 高度的可伸缩性:如果要扩容,直接加机器,调整storm计算作业的并行度就可以了,storm会自动部署更多的进程和线程到其他的机器上去,无缝快速扩容

  3. 数据不丢失的保证:storm的消息可靠机制开启后,可以保证一条数据都不丢,也不重复计算

  4. 超强的健壮性:从历史经验来看,storm比hadoop、spark等大数据类系统,健壮的多的多,因为元数据全部放zookeeper,不在内存中,随便挂都不要紧,重启简单,稳定性和可用性很高

  5. 使用的便捷性:核心语义非常的简单,开发起来效率很高开发API还是很简单的

大白话讲解

Storm的集群架构以及核心概念

Storm的集群架构

在这里插入图片描述
Nimbus,Supervisor,ZooKeeper,Worker,Executor,Task

Storm核心概念

在这里插入图片描述

  1. Topology:拓扑,务虚的一个概念
  2. Spout:数据源的一个代码组件,就是可以实现一个spout接口,写一个java类,在这个spout代码中,可以自己尝试去数据源获取数据,比如说从kafka中消费数据
  3. bolt:一个业务处理的代码组件,可以认为spout会将数据传送给bolt,各种bolt还可以串联成一个计算链条,也可以认为写java类实现一个bolt接口

一堆spout+bolt,就会组成一个topology,就是一个拓扑,实时计算作业,spout+bolt,一个拓扑涵盖数据源获取/生产+数据处理的所有的代码逻辑

  1. tuple:就是一条数据,每条数据都会被封装在tuple中,在多个spout和bolt之间传递
  2. stream:就是一个流,务虚的一个概念,抽象的概念,源源不断过来的tuple,就组成了一条数据流

Storm的并行度以及流分组

  1. 对storm的核心的基本原理,门儿清,你都很清楚,集群架构、核心概念、并行度和流分组
  2. 掌握最常见的storm开发范式,spout消费kafka,后面跟一堆bolt,bolt之间设定好流分组的策略
  3. 在bolt中填充各种代码逻辑
  4. 了解如何将storm拓扑打包后提交到storm集群上去运行
  5. 掌握如何能够通过storm ui去查看你的实时计算拓扑的运行现状
  6. 如果说,恰巧没人负责维护storm集群,也没什么大数据的团队,那么你可能需要说再去深入学习一下storm
  7. 当然了,如果你的场景不是特别复杂,整个数据量也不是特别大,其实自己主要研究一下,怎么部署storm集群

什么是并行度,什么是流分组

比如设想一个拓扑结构,几个spout,几个bolt,各种流分组情况下,数据是怎么流向的,要求具体画出集群架构中的流向

worker,executor,task,supervisor,数据流向

在这里插入图片描述

  1. 并行度:Worker->Executor->Task,没错,是Task

  2. 流分组:Task与Task之间的数据流向关系,流分组策略

图中两个executor,bolt1,数据流向bolt2的策略,bolt1的每个task流向bolt2的那个task的策略

流分组策略

常用

  1. Shuffle Grouping:随机发射,负载均衡
  2. Fields Grouping:根据某一个或者某些个fields,进行分组,如果这一个或者多个fields如果值完全相同的话,那么这些tuple,就会发送给下游bolt的其中固定的一个task

你发射的每条数据是一个tuple,每个tuple中有多个field作为字段,比如tuple,3个字段,name,age,salary,数据{“name”: “tom”, “age”: 25, “salary”: 10000} -> 1个tuple -> 3个field,name,age,salary

不常用

基本上用不到

All Grouping
Global Grouping
None Grouping
Direct Grouping
Local or Shuffle Grouping

storm 单词计数demo

storm wordcount demo 程序,蕴含了很多的知识点:

  1. 写一个Spout
  2. 写一个Bolt
  3. api怎么用的:OutputCollectorDeclarer
  4. 写一个Topology
  5. 怎么设置workerexecutortask流分组

资料地址:https://blog.csdn.net/qq_34246646/article/details/104596143
项目地址:eshop-study
切换到相应分支:
在这里插入图片描述

依赖

<dependency>
  <groupId>org.apache.storm</groupId>
  <artifactId>storm-core</artifactId>
  <version>1.1.0</version>
</dependency>
<dependency>
  <groupId>commons-collections</groupId>
  <artifactId>commons-collections</artifactId>
  <version
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值