Sparkstreaming+kafka的Receiver模式读取数据:
默认读取数据的存储级别是:MEMORY_AND_DISK_SER_2采用了receiver接收器的模式,需要一个task一直处于接受数据的状态,sparkstreaming相当于kafka的消费者,接收来的数据被分到其他节点上,完成之后,会向zookeeper更新消费者的offset。
当更新完消费者的偏移量之后,如果Driver挂掉,Driver下的Executor也会挂掉,就会有数据丢失的问题。
怎么解决;
开启WAL机制,Write Ahead Log:预写日志的机制,将数据备份到hdfs中一份,完成之后,向zookeeper中更新offset,汇报位置,发送task处理数据,开启WAL机制后,可以对接受数据的存储级别降级,(去掉_2),开启WAL会带来新的问题,处理数据效率慢,延迟大。
不仅被分到zookeeper 中,还要备份到hdfs中,向hdfs中备份一条数据
如果Driver再次挂掉了,不会向executor要,而是向hdfs,
Receiver采用的是高级模式
存在丢数据