spark streaming使用微批次架构,把流式计算当做一系列连续的小规模批处理来对待。

默认情况下,数据分别存在于两个节点。

转化操作

DStream转化操作分为无状态和有状态操作两种。
无状态操作,每个批次的处理不依赖于之前批次的数据。
有状态操作,需要使用之前批次的数据或者是中间结果来计算当前批次的数据。

无状态操作

和rdd操作基本一致

有状态操作

有状态的操作需要打开检查点机制来确保容错性。

ssc.checkpoint(“hdfs://“)
updateStateByKey提供了跨批次的状态维护

基于窗口的操作

窗口的时长和滑动步长必须是 StreamContext的批次间隔的整数倍。

优化

批次的大小设置

500毫秒已经被证实是比较好的最小批次设置。

垃圾回收和内存使用

GC引起的问题,参考JVM部分

配置参数,spark.executor.extraJavaOptions