Skip to main content

storm体验

简介

Apache Storm is a free and open source distributed realtime computation system

实时计算系统

特点:

​ 高度容错

​ 无数据丢失

​ 低延迟

​ 可扩展

实时计算框架分类

批处理

Spark streaming

流式处理

Strom

Flink

Kafka stream

核心概念

Topology(拓扑)

Spout:对接数据源, 产生tuple

Bolt: 处理tuple的基本单元

Tuple:一次消息传递的基本单元

Worker: 物理机的一个进程, 里面跑一个Topology

Executor: worker里面的一个线程,

Task: 一个Executor里面运行一类task

组件

storm系统角色和应用组件基本理解:

​ 和Hadoop一起理解,清晰点。

1)物理节点Nimubus,负责资源分配和任务调度;

2)物理节点Supervisor负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程;

3)系统角色Worker运行具体处理组件逻辑的进程;

4)系统角色Task是worker中每一个spout/bolt的线程称为一个task,storm0.8之后的版本,task不再与物理线程对应,同一个spout/bolt的task可能会共享一个物理线程,该线程称为executor

公司的运维情况

应用发布平台: mario

http://bda.mogujie.org/mario/app/edit?editType=cql

支持的方式

Stream CQL(华为) http://bda.mogujie.org/gitbooks/mario/streamcql/

Mario DSL(基于esper) http://bda.mogujie.org/gitbooks/mario/dsl-tech/2.mario_dsl.html

原生jar http://bda.mogujie.org/gitbooks/mario/storm-api/8.how_to_use_user_defined_jar.html

任务分析

http://bda.mogujie.org/mario/metrics/topology/detail?appId=hz-kafka-filter-330-1509413154&id=510&taskType=jar&owner=

版本:1.0.2

自带面板:

http://10.50.64.200:9090/topology.html?id=hz-kafka-filter-330-1509413154

实战

消费曝光队列和和点击队列的->进行白名单过滤->写kafka

参数调优

acker分析

保证at-last-once

1). spout发射一条消息,生成root_id,由于这个值不变,我们就用root_id来标识。 spout -> bolt1的MessageId = <root_id, 1> spout -> bolt2的MessageId = <root_id, 2> spout -> acker的MessageId = <root_id, 1^2>

2). bolt1收到消息后,生成如下消息: bolt1 -> bolt3的MessageId = <root_id, 3> bolt1 -> acker的MessageId = <root_id, 1^3>

3). 同样,bolt2收到消息后,生成如下消息: bolt2 -> bolt3的MessageId = <root_id, 4> bolt2 -> acker的MessageId = <root_id, 2^4>

4). bolt3收到消息后,生成如下消息: bolt3 -> acker的MessageId = <root_id, 3> bolt3 -> acker的MessageId = <root_id, 4>

5). acker中总共收到以下消息: <root_id, 1^2> <root_id, 1^3> <root_id, 2^4> <root_id, 3> <root_id, 4> 所有的值进行异或之后,即为1^2^1^3^2^4^3^4 = 0。回调spout的ack函数

  1. 如果acker在超时时间之间或者第五步不为0, 则回调spout的fail函数

附录:

github:https://github.com/apache/storm

jstorm:http://jstorm.io:8080/index_cn.html