面试准备-sparkStreaming数据流

sparkStreaming核心抽象

Dstream

两种方式消费kafka(Receiver与Direct)

Spark-Streaming获取kafka数据的两种方式-Receiver与Direct的方式

Direct优势

Receiver的offset保存在zookeeper,如果要同步需要开启(WAL)(会造成性能损耗及增加数据冗余量)

基于receiver的方式,是使用Kafka的高阶API来在ZooKeeper中保存消费过的offset的。这是消费Kafka数据的传统方式。这种方式配合着WAL机制可以保证数据零丢失的高可靠性,但是却无法保证数据被处理一次且仅一次,可能会处理两次。因为Spark和ZooKeeper之间可能是不同步的。

Direct的同步交给spark来控制(checkpoint)
基于direct的方式,使用kafka的简单api,Spark Streaming自己就负责追踪消费的offset,并保存在checkpoint中。Spark自己一定是同步的,因此可以保证数据是消费一次且仅消费一次。

spark-kafka整合

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-streaming-kafka_2.11 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka_2.11</artifactId>
<version>1.6.3</version>
</dependency>