storm

storm定时器timer源码分析-timer.clj

梦想的初衷 提交于 2020-03-01 17:43:03
storm定时器与java.util.Timer定时器比较相似。java.util.Timer定时器实际上是个线程,定时调度所拥有的TimerTasks;storm定时器也有一个线程负责调度所拥有的"定时任务"。storm定时器的"定时任务"是一个vector类型的数据 [time, callback, uuid] ,内有会有三个值,分别是 时间、函数、和uuid ,很好理解,时间表示该定时任务什么时候执行,函数表示要执行的函数,uuid用于标识该"定时任务"。"定时任务"被存放到定时器的PriorityQueue队列中(和PriorityBlockingQueue区别,在于没有阻塞机制,不是线程安全的)。优先级队列是堆数据结构的典型应用,如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列(参阅 Comparable),也可以根据 Comparator 来指定,这取决于使用哪种构造方法。优先级队列不允许null元素。依靠自然排序的优先级队列还不允许插入不可比较的对象(这样做可能导致 ClassCastException)。当然也可以自己重新实现Comparator接口, 比如storm定时器就用reify重新实现了Comparator接口。storm定时器的执行过程比较简单,通过timer-thread

Storm Spout消息的生产者

旧街凉风 提交于 2020-02-29 21:52:53
1、Spout消息的生产者(即是Tuple的创建者) public interface IRichSpout extends ISpout, IComponent{} // BaseRichSpout 重写了IRichSpout接口的所有方法,都是空函数体 public abstract class BaseRichSpout extends BaseComponent implements IRichSpout {} 1.1 Spout相关核心接口 1.1.1 ISpout接口 import org.apache.storm.task.TopologyContext; import java.util.Map; import java.io.Serializable; public interface ISpout extends Serializable { void open(Map conf, TopologyContext context, SpoutOutputCollector collector); void close(); void activate(); void deactivate(); void nextTuple(); void ack(Object msgId); void fail(Object msgId); } 1.1.2

Storm笔记

风格不统一 提交于 2020-02-29 19:42:50
用了一段时间Storm后的笔记。发现可以记的东西不多,证明Storm挺简单的,你只要遵循一些简单的接口与原则,就能写出大规模实时消息处理的程序。 不断更新中,请尽量访问博客原文。 为什么用Storm 没接触前把Storm想象得很强大,接触后觉得它就那样可有可无,再后来又觉得没有了全部自己做也麻烦。 集群管理:支持应用的部署,工作节点的管理(任务分配、HA、Scalable等),Metrics的收集。 数据流的传输与路由:支持多种数据在各处理节点间自由流动(是同类方案里DAG拓扑最灵活的),基于Netty的高效传输机制,支持轮询、广播、按值分组的路由。 数据高可靠性的保证:支持数据流动了多个节点后,在某个节点的处理失败,可以引发数据从源头开始重传。 按Storm的官方说法,你也可以自己搭建许多消息队列和worker组成的网络来实现实时处理,但是: 乏味:你大部份开发时间花费在部署worker,部署中间队列,配置消息发送到哪里。你所关心的实时处理逻辑只占了你的代码很少的比例 。 脆弱:你要自己负责保持每个worker和队列正常工作。 伸缩时痛苦:当worker或队列的消息吞吐量太高时,你需要重新分区,重新配置其它worker,让它们发送消息到新位置。 缺点 核心代码是用Clojure写成,翻看代码非常不便。其实,它现在很多新的外部模块都用Java来写了

Flume、Kafka、Storm、Scala、Impala、Hive、Spark基本概念

谁说我不能喝 提交于 2020-02-29 11:32:17
Flume Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。 Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力 Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统,支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。 Flume-og采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据,ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master间使用gossip协议同步数据。 Flume-ng最明显的改动就是取消了集中管理配置的 Master 和 Zookeeper,变为一个纯粹的传输工具。Flume-ng另一个主要的不同点是读入数据和写出数据现在由不同的工作线程处理(称为 Runner)。 在 Flume-og 中,读入线程同样做写出工作(除了故障重试)。如果写出慢的话(不是完全失败)

storm 与mysql整合问题

浪子不回头ぞ 提交于 2020-02-29 10:36:32
首先说明下问题的情况, 1、我storm 环境已经搭建完成,在本地测试wordcount是没问题的, 2、我在wordcount中加入一个MysqlBolt,此Bolt只是简单的把 wordcount的结果存入mysql数据库中,在本地模式测试测试时,完全可以把结果插入指定表。 3、我的每个storm 节点都已经把mysql-connector-java-5.1.23.jar 放到storm的lib目录下。 4、每个节点均可以访问指定数据库,都已经开通相应权限 5、并且在远程模式下执行原始wordcount是没问题的 OK !!! 问题是,在远程模式下运行整合mysql的wordcount时 就出错误了,异常为空指针,通过查找代码,发现在获得mysql 连接 时异常。 代码如下:标红处报异常 String host_port = "slaver1:3306"; String database = "test"; String username = "root"; String password = "hello"; String url = "jdbc:mysql://" + host_port + "/" + database; Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn =

kafka是什么?storm与kafka的区别?

余生颓废 提交于 2020-02-28 01:04:29
kafka是消息队列,类似于RabitMQ,作为中间组件,主要解决异步,削峰,提高系统性能。 storm与kafka的区别? storm用于流数据的实时处理,在获取流数据之前,需要加入kafka消息队列来提高性能。 flume是什么? flume是在kafka获取数据之间,加入flume获取数据,把获取数据的流程封装起来,变得比较简单。 来源: oschina 链接: https://my.oschina.net/u/4434424/blog/3176335

Storm知识总结

大憨熊 提交于 2020-02-27 02:43:55
1. 什么是Storm? 较官方的解释 : storm是一种用于事件流处理的分布式计算框架,它是有BackType公司开发的一个项目,于2014年9月加入了Apahche孵化器计划并成为其旗下的顶级项目之一。Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm用于实时处理,就好比 Hadoop 用于批处理。Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。 普通解释: Storm是一个分布式、可靠、容错的实时流式计算系统。用于对大规模流式数据提供实时处理。 2.Storm的优势 简单的编程模型。类似于MR降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性 服务化。一个服务框架,支持热部署,即时上线或下线APP,可以用各种编程语言,Java、R、Python 容错性。Storm会管理工作进程和节点的故障 水平扩展。计算是在多个线程、进程和服务器之间并行进行的 可靠的消息处理。Storm保证每个消息至少能得到一次完整处理。任务失败时,会负责从消息源重试消息 快速。系统的设计保证了消息能得到快速的处理 本地模式。Storm有一个本地模式,可以在处理时完全模拟Storm集群,这可以快速进行开发和单元测试 附 :Spark Streaming与Storm的优缺点分析 Storm是纯实时的 Storm的事务机制

Storm 分组策略和并发度

心已入冬 提交于 2020-02-27 00:29:48
分组策略和并发度 一、Stream Grouping 所谓的分组策略就是在Spout与Bolt、Bolt与Bolt之间传递Tuple的方式。 stream grouping用来定义一个stream应该如何分配给Bolts上面的多个Executors(多线程、多并发)。 Stream grouping的类型 Storm里面有7种 1)Shuffle Grouping: 随机分组,轮询,平均分配。随机派发stream里面的tuple,保证每个bolt接收到的tuple数目大致相同。 2)Fields Grouping:按字段分组,比如按userid来分组,具有同样userid的tuple会被分到相同的Bolts里的一个task,而不同的userid则会被分配到不同的bolts里的task。 3)All Grouping:广播发送,对于每一个tuple,所有的bolts都会收到。 4)Global Grouping:全局分组,这个tuple被分配到storm中的一个bolt的其中一个task。再具体一点就是分配给id值最低的那个task。 5)Non Grouping:不分组,这stream grouping个分组的意思是说stream不关心到底谁会收到它的tuple。目前这种分组和Shuffle grouping是一样的效果。在多线程情况下不平均分配。 6)Direct

使用Docker快速部署Storm环境

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-15 13:19:15
Storm的部署虽然不是特别麻烦,但是在生产环境中,为了提高部署效率,方便管理维护,使用Docker来统一管理部署是一个不错的选择。下面是我开源的一个新的项目,一个配置好了storm与mono环境的Docker镜像编排: storm-mono-docker 。 这个项目得益于 https://github.com/ptgoetz/storm-vagrant 和 https://github.com/wurstmeister/storm-docker ;在此感谢他们的付出! 项目使用的Docker镜像托管在 https://index.docker.io 。 准备工作 安装 Docker Engine, https://docs.docker.com/ 安装 docker-compose http://docs.docker.com/compose/install/ 克隆git项目: git clone https://github.com/ziyunhx/storm-mono-docker 使用 首先将命令行目录切换到刚刚克隆下来的git项目目录; 通过以下命令启动集群: docker-compose up -d 你也可以使用 docker-compose up 命令来将结果输出到当前命令行界面,但是在你结束它之前无法进行任何其它操作,而一旦命令行退出,所有的容器都将停止。而

(01)Storm简介

我是研究僧i 提交于 2020-02-14 18:34:03
  1、基本概念   Apache Storm是一个免费、开源的分布式实时计算系统。使用它可以轻松实现数据流的实时处理。Strom处理数据快速,基准时钟在超过一百万元组每秒处理的每个节点。易于设置和操作,具有可扩展性、容错性,保证了数据的处理能力。Storm主要用于实时在线分析,机器学习,连续计算,分布式RPC,ETL等。   2、Storm的运行机制   Storm实时处理数据,通过一个个节点对数据加工,最后输出数据,主节点不处理数据,每一个supervisor节点处理数据,每一个supervisor节点可以有多个线程。 来源: https://www.cnblogs.com/javasl/p/12308313.html