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整合
|
|