浪院长 浪尖聊大数据
今天,主要想聊聊spark streaming的使用心得。redis
主要是转换算子,action,和状态算子,这些其实,就按照api手册或者源码里接口介绍结合业务来编码。
其实,想用好spark streaming 掌握spark core,spark rpc,spark 任务调度,spark 并行度等原理还很是有必要。api
说到中间算子你们确定都会想到UpdateStateByKey等状态。里面不少注意事项,好比顺序性,key的超时机制维护。这个适合数据量很少,尤为是key的维度很少,value不大的状况。
固然数据量上来了,要想维护中间状态怎么办?其实这个时候确定是第三方存储,好比redis,alluxio。redis更适合那种key带超时机制的,而且数据量确定不能过大。而alluxio就很适合那种高吞吐量的,好比去重统计。缓存
direct streaming能保证仅一次处理,可是要求输出存储支持密等性,或者主动将结果更改成存在更新不存在插入。固然,若是外部存储系统支持事务那就更嗨,能实现恰一次处理。
实际上在offset维护这个层面上,spark streaming 不一样版本于kafka不一样版本结合实现有很大不一样。ide
我以为对于监控告警及故障自动恢复,重要程度不亚于业务场景。由于再好的业务实现,架不住系统挂掉你不知道。由于你总不能二十四小时盯着系统。并且不少公司对故障自动恢复都有kpi,好比3min,人工去检测故障并恢复不太可能,须要本身实现一套监控系统。大数据
调优对于spark streaming很是重要,由于一个批次处理延迟就会致使job堆积,结果输出延迟,深圳任务挂掉数据丢失。调优其实最注重对spark 原理把控,数据量的了解及资源和数据的关系。编码
源码阅读,为了帮助你们更透彻的理解原理。主要会分三块:
spark streaming 与kafka-0.8.2 direct stream。
spark streaming 与kafka-0.8.2 receiver based stream。
spark streaming 与kafka-0.10.2 direct api。spa