spark-streaming对接kafka的两种方式
Posted lucas-zhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spark-streaming对接kafka的两种方式相关的知识,希望对你有一定的参考价值。
spark-streaming对接kafka有两种方式:
1.基于receiver的方式,属于高级API,简单但是效率低,容易丢失数据(可以设置WAL)。
它的原理是:receiver从kafka拉取数据存储到executor的内存中,spark-streaming启动job处理数据。
偏移量保存在zookeeper中。
2.基于Direct的方式
属于低级API,效率高。
executor直接对接kafka的partition,触发action后,周期性地读取topic分区指定offset的数据,生成batch运算。
优点:
简言之,省去了receiver,降低资源消耗,提高性能。
1.简化并行读写:Spark会创建和kafka partition数量一致的RDD partition,并且并行化从kafka中读取数据,所以在kafka的partition和rdd的partition之间,一一对映。
2.高性能:direct没有receiver,不需要WAL写前日志,因为kafka中的副本就可以保证数据不丢失。
3.降低资源,direct不需要receiver,因此申请的executor可以全部用于运算。
缺点:
1.开发复杂
2.要spark自己维护offset
以上是关于spark-streaming对接kafka的两种方式的主要内容,如果未能解决你的问题,请参考以下文章
java spark-streaming接收TCP/Kafka数据
scala spark-streaming整合kafka (spark 2.3 kafka 0.10)
spark-streaming读kafka数据到hive遇到的问题