与 流式计算 对应的是 批量计算,流式计算 可以 及时反馈结果,而批量计算 往往伴随着延时。
本节主要总结两点内容:
- sparkstreaming
- 消息队列(Kafka)
一、sparkstreaming
首先给出流式计算的一个框架:LAMBADA 架构:
如图:上半部分为 批量计算;下半部分 为 流式计算;共同构成了 LAMBADA 架构;
1、sparkstreaming 架构
sparkstreaming是一个伪实时 系统,其 操作单元 为 mini batch(dstream),而非一个data。
sparkstreaming 3 部分: input -> sparkstreaming(流式计算) -> output;
数据的输入 源 如图 左半部分;
数据的输出 如图 右半部分;
eg:从用户那里获取的日志信息 可以 传入 Kafka,然后,借由Kafka 将日志信息 传给sparkstreaming处理,处理后的数据又可以传入kafka,共下一个sparkstreaming处理:
log -> kafka -> sparkstreaming -> kafka -> …;
sparkstreaming的核心部分是 dstream,其定义如下:
Dstream的来源有两种:1、数据源的输入;2、经 算子转换(dstream) 得到;
Dstream形式有很多种:kafka,twitter,socket,file。其中:
kafka,twitter等类型的dstream,首先要经过Reciever 才能 进行 Executor执行:
dstream -> Reciever -> Executor:
socket,file等类型的dstream,可以直接流入 Executor:
dstream -> Executor;
sparkstreaming中的延时分为:处理延时,和,调度延时 两种,因此,为了减少 流式计算 中的 数据积压 问题,应该使得 数据处理速率 > 数据输入速率;
以下为一个sparkstreaming的code:利用sparkstreaming接收socket数据,将其转为dstream形式的数据,并对其进行分析,以及,upstatebykey操作:[D:/julytest/spark大数据实战/Streaming.scala]
二、消息队列
- Kafka
- RocketMq
1、kafka的优点:
- 实施转发
- 可作为存储空间使用
- 吞吐量大(磁盘顺序写 数据)
- 分布式
- 支持 离线 和 实时 的 数据服务(存储离线数据后,通过offset,进行实时读取)
2、Kafka的主要部件:
- producer:给kafka喂数据
- broker:集群物理机(虚拟机)
- consumer:消费数据
- topic:不同类型的消息发往不同的地方(通常这里的topic指一个“路径名”)
- consumer group:consumer group中的consumer并行处理一个数据,各个consumer之间处理的数据没有重叠;
为了增加吞吐量,一个Topic(逻辑) 可以 拆分为 几个 partition(物理);
一个info到来后 ----Topic----> 为其分配partition --------------> zookeeper为各个partition找broker的地址 -----------> execute
kafka中的信息一般为2种形式:1、字符串型;2、二进制形式;图片信息 一般不用 kafka传送(too big)。
利用sparkstreaming访问 Kafka数据:
KafkaProducerUtils.java : 构建了一个kafka producer类,用于发送数据;
SparkStreamingKafkaProducer.scala:构建了一个实例,利用kafka producer来发送数据;
SparkStreamingSample.scala 构建了一个实例,利用sparkstreaming来接收kafka发送的数据,并将其转为dstream形式,进行简要分析;
[D:/julytest/spark大数据实战/_]
Note that:kafka的版本号非常重要,在访问别人的kafka数据之前,要先弄清其version;