缓存预热和热点数据(storm)解决方案

storm的特点

  • 支撑各种实时类的项目场景:实时处理消息以及更新数据库,基于最基础的实时计算语义和API(实时数据处理领域)
  • 对实时的数据流持续的进行查询或计算,同时将最新的计算结果持续的推送给客户端展示,同样基于最基础的实时计算语义和API(实时数据分析领域)对耗时的查询进行并行化,基于DRPC,即分布式RPC调用,单表30天数据,并行化,每个进程查询一天数据,最后组装结果
  • 高度的可伸缩性:如果要扩容直接加机器,调整storm计算作业的并行度,storm会自动部署更多的进程和线程到其他的机器,无缝快速扩容
  • 数据不丢失的保证:storm的消息可靠机制开启后,可以保证数据不丢失
  • 超强的健壮性:storm比hadoop、spark等大数据类系统健壮的多,因为元数据全部放zookeeper不在内存中,稳定性和可用性很高
  • 使用的便捷性:核心语义非常的简单,开发起来效率很高

Storm的集群架构: Nimbus,Supervisor,ZooKeeper,Worker,Executor,Task

Storm的核心概念

  • topology :拓扑,一堆 spout+bolt,就会组成一个topology,一个拓扑涵盖数据源获取/生产+数据处理的所有的代码逻辑
  • spout :数据源的一个代码组件,可以写一个Java类实现一个spout接口去数据源获取数据,比如说从kafka中消费数据
  • bolt :处理业务的代码组件,spout 会将数据传送给bolt,各种bolt还可以串联成一个计算链
  • tuple :就是一条数据,每条数据都会被封装在 tuple 中,在多个 spout 和 bolt 之间传递
  • stream :就是一个流,抽象的概念,源源不断过来的 tuple,就组成了一条数据流
  • 并行度:Worker -> Executor -> Task ,就是值一个 Task
  • 流分组:Task 与 Task 之间的数据流向关系

常用发射策略:

  • Shuffle Grouping:随机发射,负载均衡
  • Fields Grouping :根据某一个或者某些个 fields 进行分组,fields 值完全相同的 tuple 会发送给下游
    bolt 的其中固定的一个 task
  • 其它:All Grouping、Global Grouping、None Grouping、Direct Grouping、Local or Shuffle Grouping

BaseRichSpout :

  • open() :对 spout 进行初始化的,比如创建一个线程池、数据库连接池,或者构造一个httpclient等
  • nextTuple() :task 会负责去不断循环调用的方法
  • declareOutputFields() :定义发射出去的每个 tuple 中的每个 field 的名称

BaseRichBolt

  • prepare() :这个tuple的发射器
  • execute() :每次接收到一条数据后,就会交给这个 executor 方法来执行
  • declareOutputFields() :定义发射出去的 tuple 每个 field 的名称

缓存的预热和热点数据处理

你可能感兴趣的:(笔记,storm,缓存)