12.3 kafka和Sparkstreaming

kafka每个7天(168小时),清理一次过期数据

发布与订阅的分布式文件系统

kafka+Sparkstreaming模式:

1,Receiver

2,Direct直接连接(将kafka看成类似HDFS)

Receiver模式:

1,web端把消息发送到kafka

2,kafka定时推送消息到Excutor进程,这个Excutor就是Receiver task,Receiver 接收来的数据会持久化,默认持久化级别:MEMORY_AND_DISK_SER_2,这个级别可以修改

3,Excutor会对接收到的数据进行备份和存储到其他Excutor进程,这个过程会有节点到节点之间的数据传输

4,同步完成之后,就会去zookeeper中修改同步消费者消费偏移量

5,同步完成之后,各个Excutor也会将接收来的数据地址汇报给Driver中的ReceiverTracker(追着接收来的数据位置)

6,Driver发送task的时候参考ReceiverTracker,可以更好的实现task数据本地化

Receiver 问题:

1),当Driver挂掉了,那么Driver下面的Excutor就会团灭,当更新完zookeeper中的消费偏移量之后挂掉,就会有数据丢失问题

2),当开启WAL机制(预写日志),很好的保证数据的安全性,当在HDFS上备份数据的时候,因为写HDFS比较消耗性能,会增加job的执行时间,当job的执行时间比BatchInterval还要长的时候,就会产生信息堆积

Direct模式:

1,就是直接连接kafka,并没有使用zookeeper来管理消费者的消费偏移量,Sparkstreaming自己来管理消费者的消费偏移量,使用checkpoint来管理消费者的消费偏移量

2,在Sparkstreaming里面job的执行和checkpoint的执行是异步的,很好的解决了Receiver的问题

Sparkstreaming处理数据的并行度:

1,Direct模式的并行度是由topic中partition的个数来决定的

2,Receiver模式的并行度是由spark.streaming.blockInterva来决定的,默认是200ms,最小不要小于50ms,要不block里面的信息太少

Receiver task会根据blockInterva将接收来的数据划分成一个个的block,假如blockInterva设置的是5s,那么5秒钟的数据就会被划分成25个block,这25个block被封装到一个batch里面

batch(block)

RDD(partition)

block的数量决定了RDD中的partition数

partition又决定了并行度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值