一.storm本地测试
- 创建spout 继承 BaseRichSpout
- 创建bolt 继承 BaseBasicBolt
- 创建topology 使用TopologyBuilder createTopology()创建
- 启动topology 使用 LocalCluster submitTopology发布
二.本地storm+kafka
- 引入storm kafka依赖
- 创建KafkaSpout
注意kafkaSpout是通过 spoutConfig创建 需指定spoutConfig的scheme (自己写一个实现scheme接口 指定key value的值) - 创建bolt
- 创建topology
- 启动topology (如果在集群启动需要 StormSubmitter.submitTopology(args[0],conf,builder.createTopology())?
三.storm集群搭建 在storm集群上发布topology
- 启动zookeeper bin/zkServer.sh start
- 配置storm.yaml 复制到集群各个节点
- 在节点1 启动 (启动)
storm nimbus &
storm ui & - 在节点2 启动
storm nimbus &
storm supervisor & - 在节点3启动
storm supervisor & - 在节点2部署topology(将topology项目打成jar包)
./storm jar storm-test.jar com.example.kafkademo.mystorm.MyTopology(程序入口主类) mytopology(拓扑名称) - 在192.168.1.106:8080 查看已经发布的 topology , 也可以在 bin/zkCli.sh 中查看 storm节点
四.storm相关知识
- storm结构
(1). nimbus调度卫星 supervisors执行者
(2). supervisors 一个supervisor对应一台服务器,对应多个workers(JVM)(一个worker一个进程,一个topology),
(3). 一个worker可以对应多个executor(一个executor对应一个进程),
(4). 一个executor可以对应多个task, 如下图:
- spout中的nextTupple()
该方法为spout线程死循环执行,如果collector.emit()未执行成功默认1s执行1000次
如果执行成功1s轻松百万+ - shuffleGrouping(“spoutid”) fieldGrouping(new Field(“value”))通过spoutid 或哲哲通过filed进行分组
- storm整合springboot 将springboot的启动类 放在 spout的prepare()方法中即可