解析SparkStreaming和Kafka集成的两种方式
2020-02-21 17:33:17Spark Streaming是基于微批处理的流式计算引擎,通常是利用Spark Core或者Spark Core与Spark Sql一起来处理数据。在企业实时处理架构中,通常将Spark Streaming和Kafka集成作为整个大数据处理架构的核心环节之一。
Spark Streaming是基于微批处理的流式计算引擎,通常是利用Spark Core或者Spark Core与Spark Sql一起来处理数据。在企业实时处理架构中,通常将Spark Streaming和Kafka集成作为整个大数据处理架构的核心环节之一。
针对不同的Spark、Kafka版本,集成处理数据的方式分为两种:Receiver based Approach和Direct Approach,不同集成版本处理方式的支持,可参考下图:
Receiver based Approach
基于receiver的方式是使用kafka消费者高阶API实现的。
对于所有的receiver,它通过kafka接收的数据会被存储于spark的executors上,底层是写入BlockManager中,默认200ms生成一个block(通过配置参数spark.streaming.blockInterval决定)。然后由spark streaming提交的job构建BlockRdd,最终以spark core任务的形式运行。
关于receiver方式,有以下几点需要注意:
建议通过参数spark.locality.wait调整数据本地性。该参数设置的不合理,比如设置为10而任务2s就处理结束,就会导致越来越多的任务调度到数据存在的executor上执行,导致任务执行缓慢甚至失败(要和数据倾斜区分开)
多个kafka输入的DStreams可以使用不同的groups、topics创建,使用多个receivers接收处理数据
两种receiver可靠的receiver:
限制消费者消费的最大速率涉及三个参数:
在产生job时,会将当前job有效范围内的所有block组成一个BlockRDD,一个block对应一个分区
kafka082版本消费者高阶API中,有分组的概念,建议使消费者组内的线程数(消费者个数)和kafka分区数保持一致。如果多于分区数,会有部分消费者处于空闲状态
Direct Approach
direct approach是spark streaming不使用receiver集成kafka的方式,一般在企业生产环境中使用较多。相较于receiver,有以下特点:
1.不使用receiver
不需要创建多个kafka streams并聚合它们
减少不必要的CPU占用
减少了receiver接收数据写入BlockManager,然后运行时再通过blockId、网络传输、磁盘读取等来获取数据的整个过程,提升了效率
无需wal,进一步减少磁盘IO操作
2.direct方式生的rdd是KafkaRDD,它的分区数与kafka分区数保持一致一样多的rdd分区来消费,更方便我们对并行度进行控制
注意:在shuffle或者repartition操作后生成的rdd,这种对应关系会失效
3.可以手动维护offset,实现exactly once语义
4.数据本地性问题。在KafkaRDD在compute函数中,使用SimpleConsumer根据指定的topic、分区、offset去读取kafka数据。
但在010版本后,又存在假如kafka和spark处于同一集群存在数据本地性的问题
5.限制消费者消费的最大速率
spark.streaming.kafka.maxRatePerPartition:从每个kafka分区读取数据的最大速率(每秒记录数)。这是针对每个分区进行限速,需要事先知道kafka分区数,来评估系统的吞吐量。
大数据专业主要学什么?
大数据技术专业属于交叉学科:以统计学、数学、计算机为三大支撑性学科;生物、医学、环境科学、经济学、社会学、管理学为应用拓展性学科。

此外还需学习数据采集、分析、处理软件,学习数学建模软件及计算机编程语言等,知识结构是二专多能复合的跨界人才(有专业知识、有数据思维)。
以中国人民大学为例:
基础课程:数学分析、高等代数、普通物理数学与信息科学概论、数据结构、数据科学导论、程序设计导论、程序设计实践。
必修课:离散数学、概率与统计、算法分析与设计、数据计算智能、数据库系统概论、计算机系统基础、并行体系结构与编程、非结构化大数据分析。
选修课:数据科学算法导论、数据科学专题、数据科学实践、互联网实用开发技术、抽样技术、统计学习、回归分析、随机过程。
Spark Streaming场景应用用什么获取数据读取方式
Receiver-based的Kafka读取方式是基于Kafka高阶(high-level) api来实现对Kafka数据的消费。 在提交Spark Streaming任务后,Spark集群会划出指定的Receivers来专门、持续不断、异步读取Kafka的数据,读取时间间隔以及每次读取offsets范围可以由参数来配置。 读取的数据保存在Receiver中,具体StorageLevel方式由用户指定,诸如MEMORY_ONLY等。 当driver 触发batch任务的时候,Receivers中的数据会转移到剩余的Executors中去执行。 在执行完之后,Receivers会相应更新ZooKeeper的offsets。
请教一下ISSUE 131的写法
wiki说, Art分motivated和non-motivated两种。 所谓motivated就是指在创作时就有一些特定的intention,是实用主义型的,主要作为communication, entertainment之类的,比如宣传海报。 non-motivated就是出于艺术家个人的体验,没有utility, 表达自己的想象、神秘体验、个人内心和谐之类的,比如达利的画,完全不晓得画的啥子。 这么分下来,显然题目所说的只是艺术的motivated类的功能的一个子集,那就是unfairly generalize了。 于是就可以写,1)admittedly,可以表达hidden impulse这个例子貌似不大好找。 。 2)然后写除了hidden impulse还有其他功能嘛,比如说娱乐,比如说有的表达了超越时代的观点3)另一方面,有的艺术完全与实用无关,就是发泄一下自己的创造力(art is something humans must do by their very nature),探索下内心世界这个例子蛮多的,Picasso,Dali,kafka,凡是搞不懂的都可以往上吹请参阅wiki art词条
发表评论