SparkStreaming 简介
spark的内置模块,用于实时计算
微批次流式实时计算框架
SparkStreaming 架构
有两个线程,采集线程和处理线程
采集线程向Driver 提交,Executor 进行具体数据的处理。
SparkStreaming 的背压机制
根据executor的消费能力来处理数据
SparkStrreaming 的创建方式
DStream 是SparkStraming对处理的数据集的一个抽象
读取指定端口数据的创建DS
通过RDD 队列创建DS(不常用)
通过定义Receiver读取指定数据源数据创建DS
通过读取Kafka 读取数据源
官方给了两种:
spark-streaming-kafka-0-8 在spark2.3.0以后过时
- Receiver DStream
默认情况下,offset 维护在 zk 中 - Direct Dstream
默认情况下,offset 维护在checkpoint检查点,需要改变
SparkStreamingContext的创建方式
可以手动指定 offset 维护位置,为了保证数据的精准一致,维护在有事务的存储。
spark-streaming-kafka-0-10 推荐使用版本
使用官方链接: link.
Kafka 创建主题,并且生产者进行消费
# 创建kafka主题
cd /opt/cloudera/parcels/CDH/bin
# 创建主题
./kafka-topics --create -zookeeper 10.0.0.205:2181 --replication-factor 2 --partitions 3 --topic streamingLLd
# 查看创建主题
./kafka-topics --list -zookeeper 10.0.0.205:2181
# 查看主题明细信息
./kafka-topics --describe --topic streamingLLd -zookeeper 10.0.0.205:2181
# 对 该主题开启生产者 进行生产数据
./kafka-console-producer --broker-list cdh05:9092 --topic streamingLLd
spark-streaming-kafka-0-10 消费代码
package ypl.com.streaming
import org.apache.kafka.clients.consumer.{
ConsumerConfig, ConsumerRecord}
import org.apache.kafka.common.serialization.StringDeserializer
import org.apache.spark.SparkConf
import org.apache.spark.streaming.dstream.InputDStream
import org.apache.spark.streaming.kafka010.{
ConsumerStrategies, KafkaUtils, LocationStrategies}
import org.apache.spark.streaming.{
Seconds, StreamingContext}
object SparkStreamDirectAPI {
def main(args: Array[String]): Unit = {
// 配置文件对象
val conf = new SparkConf().setMaster("local[*]").setAppName("SparkDirectAPI")
// 创建StreamingContext 对象
val scc = new StreamingContext(conf, Seconds(3))
// 定义Kafka 相关的连接参数
val kafkaParams = Map[String, Object](
ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG -> "cdh03:9092,cdh04:9092,cdh05:9092",
ConsumerConfig.GROUP_ID_CONFIG -> "lld",
ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG -> "org.apache.kafka.common.serialization.StringDeserializer",
ConsumerConfig.VALUE_DESERIALIZER_CLAS