-
Spark checkpointing
- Spark和kafka整合
- SparkStreaming是一种流式处理框架,是SparkAPI的扩展,支持可扩展、高吞吐、容错的
准实时数据处理,实时数据的来源可以事:
- Kafka、Flume、Twitter,zeroMQ或者TCP sockets;
- 并且可以使用高级功能的复杂算子来处理流数据,例如:map,reduce,jion,window;最终处理后的数据可以来存放在文件系统,数据库,方便实时展现;
- Storm是纯实时的流式处理框架,SparkStreaming是准实时的处理框架(微批处理);因为微批处理,SparkStreaming的吞吐量比Storm要高;
- Storm的事务机制要比SparkStreaming的要完善;
- Storm支持的动态资源调度(Spark1.2及以后也支持)
- SparkStreaming擅长复杂的业务处理,Storm不擅长复杂的业务处理,擅长简单的汇总计算
Spark的各个子框架,都基于核心Spark的,SparkStreaming在内部的机制如下:SparkStreaming接收到实时input数据流,并将数据分批成batch,然后由Spark Engine进行处理最后生成batch的输出结果流
任何作用于DStream的算子,其实都会被转化为对其内部RDD的操作。例如,我们将 lines 这个DStream转成words DStream对象,其实作用于lines上的flatMap算子,会施加于lines中的每个RDD上,并生成新的对应的RDD,而这些新生成的RDD对象就组成了words这个DStream对象。其过程如下图所示
- 基础数据源:在StreamingContext API中可以直接使用源:如文件系统,套接字连接或者Akka actor
- 高级数据源:需要依赖额外工具类的源,如:Kafka、Flume;
因为SparkStream是7*24小时运行的,Driver只是一个简单的进程,有可能挂掉,所以实现Driver的HA就又必要(如果使用Client模式就无法实现DriverHA)Yarn平台cluster模式提交任务,AM(AplicationMaster)相当于Driver,如果挂掉会自动启动AM。这里所说的DriverHA针对的是Spark standalone和Mesos资源调度的情况下。实现Driver的高可用有两个步骤:
- receiver模式采用了Receiver接收器模式,需要一个线程一直接受数据,将数据接收到Executor中,默认存储级别是MEMORY_AND_DISK_SER_2
- receiver模式自动使用zookeeper管理消费者offset
- receiver模式底层读取kafka采用High Level Consumer API实现,这种模式不关心offset,只要数据;
- receiver模式当Driver挂掉时有数据丢失问题,可以开启WAL机制,避免丢失数据,但是开启后加大数据延迟,并存在数据重复消费等风险;
- receiver模式并行度由spark.stream.blockInterbal=200ms,可以减少这个参数增大并行度,最小不能低于50ms;
- Receiver模式不被使用
- 被动将数据接受到Executor,当有任务堆积实,数据存在问题
- 这种模式不能手动维护消费者offset
推荐阅读:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69949806/viewspace-2906587/
,如需转载,请注明出处,否则将追究法律责任。