Day47[20180728]_Spark Streaming(二)

Spark Streaming
    StreamingContext: scc
    -a. 实时处理流式数据框架
        Apache Spark框架中一个模块
    -b. 按照时间间隔将流式数据划分为很多批次batch
        每批次数据进行处理,底层属于SparkCore中RDD处理
        batchInterval
    -c. 数据结构
        DStream:
            离散的流、分离的流
            DStream = List<RDD>
    -d. 处理数据流程:
        -i. 数据源
            从哪里接收实时流式数据
            kafka/Flume/Tcp Socket
        -ii. 数据处理
            业务并不复杂:
                - 统计类型的数据分析
                - 在线机器学习
                    D -> A -> M, 依据模型实时预测推荐
            transformation  转换函数
                将DStream转换为另为一个DStream
            大部分函数与RDD中转换函数一样
                尽量使用transform函数进行数据处理操作:针对每批次RDD操作的
        -iii. 存储结果
            针对每批次处理RDD的结果进行输出操作
            DStream#output
            输出函数: foreachRDD(rdd => {
                // .....
            })
            输出地方:
                Console(测试)、Redis、HBase、RDBMS

1、	Streaming运行在Driver端(底层是SparkContext)
2、	Receive运行在Excutor上面
3、	SparkContext让Receiver 以task的形式运行在Excutor上面
4、	每个接收输入流然后将它们划分(按照时间间隔 默认200ms)为很多块
    比如:1s可以划分为5个block,相当于rdd中的五个分区
5、	Excutor讲block放到内存中去

 注意:为什么要设置3个线程

针对SparkStreaming开发测的时候,设置本地模式运行
    --master local[3]
    最好设置为3个线程运行,
        从Socket 接收数据,需要一个Task运行一个Receiver接收源端数据,占用一个Thread
    线程使用。剩余2个Thread,可以并行处理数据Task,分布式计算

 blockInterval

Streaming 统计信息
每5秒一个批次,运行了1分2秒,从2018/07/28 09:44:57开始运行(完成了12个批次,接收了
444条数据)
输入流:
接收器:1个接收器
平均接收数据:6.15条/秒

调度延迟时间 + 处理时间 =  总的时间

横向:时间  纵向:接收数据数

调度时间越平就说明性能越好,延迟越低
Scheduling Delay:上一批次没有处理完,处理下一批次数据就得等这时候就产生的延迟
Processing Time:每一批次处理数据的时间
Total Dealy = Scheduling Delay + Processing Time
企业中的性能调优:
  Scheduling Delay这条线接越平越好,说明流式计算是实时处理的。
  Processing Time < = batchInterval 
blockInterval
默认值为200ms, 官方建议最小推荐值为50ms,依据实际情况调整
优化项:
        Total Delay(Processing Time)    >   batchInterval (需要处理)
每批次数据处理的时间 大于 batchInterval时间:
    每批次的数据是RDD进行执行计算的,可以增加RDD的分区数,相当于增加Task数目,在资源充分的情况下,增加并行执行的Task数目。
    减少blockInterval的值,比如设置为100ms(默认200ms,每一批次1s的话,blockInterval就是分成了10个block也就是10个分区)
总的延迟=调度延迟+处理时间
处理时间<=批处理时间 才不会出现延迟
在大数据集群中会有个别高峰期,这时处理时间会大于批处理时间造成调度延迟(由于资源不足导致的
个别时期数据延迟),
但是这时是可以接受的
注意:在实际开发中业务很简单的,主要是性能的调优,程序出问题能不能快速恢复

Kafka

Kafka  高吞吐量的分布式消息系统,发布订阅的消息系统
消息系统Kafka   
    - 分布式消息队列(Message Queue)系统
        topic: 主题/类别
            分区partition  ->  设置副本数
    - 发布订阅的功能
        比喻:
            发布者  ->    推送文章
            微信公众号:    
                订阅者1
                订阅者2
                订阅者3
                .....

 Kafka官网的三种功能

注意:我们只要了解消息队列系统使用,其他功能不需要掌握
消息队列系统类似于flume的架构模型
点到点的消息队列

一个发布多个订阅的过程(类似于公众号订阅的过程)
  一份数据可以给多种接收器订阅:
  然后做不的功能(比如推荐系统,机器学习,精准营销…)

 1、读写流的数据像消息系统一样

2、0.0.1版以后,通过自带的api可以自己编写一些扩展的流处理应用,接受实时的时间数据

3、存储数据发布订阅的功能

Kafka如何进行数据分区以及存储数据

1、Topic &Partition

存储有三个部分:
1、	偏移量(偏移量越小数据就越老)
2、	Key说的是放到哪个partitions(partition分区器默认hashcode取模进行分区的)
3、	Value消息的值 
注意:偏移量越小数据就越旧,偏移量越大数据越新 

2 、副本数

不同类型放到不同的Topic中去(下图设置了两个Topic:  Topic Click Topic Upload)
三个分区两个副本

  3、Kafka原理

分布式的提交日志,将接收日志顺序写到磁盘
1、在kafka中Topic就是用户定义的类别,将消息发布到Topic去
2、Kafka生产者发布信息到一个或多个消费者,消费者订阅者这些数据处理这些发布的数据
3、kafka集群包含一个或多个服务器,称为broker用来管理Topic的分区数据已经持久化数据.
zookeeper 保存的集群配置信息、元数据、多少个Broker、Broker中分区数
比如三台机器选取一个当leader(主节点),其他都是从节点

Zookeeper存放的是Kafka的配置信息和元数据

4、Kafka的安装

1、Kafaka是Scala编写的,所以安装Scala
2、Scala是基于Java虚拟机,所以安装java
3、配置信息和元数据都是放在Zookeper中
Kafka是一个发布订阅的消息系统,作为一个分布式、分区、副本提交日志服务

 5、消息队列

消息队列系统代表的就是将转换数据从这个程序发送到另一个程序,
因此程序注重的是数据,而不用担心如何分享它.
点到点的消息队列(一对多) –> 发布订阅的消息队列(一对多)
   以前是单机运行系统点对点的系统就可以完成
   现在需要一对多的使用,一个数据发布多个Receiver接收(实时统计,推荐系统,算法分析)

  6、kafka安装

kafka 下载:
        http://archive.apache.org/dist/kafka/
针对SCALA 2.11编译包:
        http://archive.apache.org/dist/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz
API文档;
        http://kafka.apache.org/082/documentation.html
快速安装:
        http://kafka.apache.org/082/documentation.html#quickstart

安装java和scale:

 安装zookeeper:

 安装Kafka伪分布式集群环境:

 类似Zookeeper框架分布式安装部署
    - 单机模式:standalone
        在一台机器上启动有一个JVM进程服务
    - 伪分布式模式
        在一台机器上启动多个JVM进程服务

启动服务:kafka-server-start.sh
停止服务:kafka-server-stop.sh
查看topic相关信息:kafka-topics.sh
消费者:kafaka-console-consumer.sh
生产者:kafaka-console-producer.sh 

 Kafka依赖的jar包:可以看出依赖zookeeper和scala中的jar包

 Kafka的配置文件:

 7、配置server9092、server9093、server9094

broker.id   唯一的标识符
port        端口号
host.name   运行的主机名称

Broker.id = 9092 表示:Broker机器唯一标识符
host.name 如果不设置就绑定到所有的接口上

在kafka中创建三个临时目录用于配置

按照同样的方式配置9093、9094

启动kafka 9092、9093、9094:

启动三个kafka: 

​​​​​​

 创建Topic

zookeeper: 配置信息存放在zookeeper的那台机器上
replication-factor:副本数
partitions:分区数
topic:topic名称

创建后zookeeper中存储的信息

partitions中三个分区两个副本
0:第1分区  两个副本  存放9092 9093
1:第2分区  两个副本  存放9093 9094
2:第3分区  两个副本  存放9094 9092

8、发送数据到Topic

生产数据:

消费数据:

类似于微信公众号,一个发布,多个订阅

zookeeper中存入了每条数据偏移量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值