12.3 kafka和Sparkstreaming

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011418530/article/details/81937481

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又决定了并行度

猜你喜欢

转载自blog.csdn.net/u011418530/article/details/81937481
今日推荐