spark-streaming

DStream创建

Kafka数据源:

ReceiverAPI:需要一个专门的 Executor 去接收数据,然后发送给其他的 Executor 做计算。存在的问题,接收数据的 Executor 和计算的 Executor 速度会有所不同,特别在接收数据的 Executor速度大于计算的 Executor 速度,会导致计算数据的节点内存溢出。

DirectAPI:是由计算的 Executor 来主动消费 Kafka 的数据,速度由自身控制。

Kafka 0-10 Direct 模式

需求:通过 SparkStreaming 从 Kafka 读取数据,并将读取过来的数据做简单计算,最终打印到控制台。

导入依赖

<dependency>

<groupId>org.apache.spark</groupId>

<artifactId>spark-streaming-kafka-0-10_2.12</artifactId>

<version>3.0.0</version>

</dependency>

编写代码

/**

* 通过DirectAPI 0-10 消费kafka数据

* 消费的offset保存在_consumer_offsets主题中

*/

object DirectAPI {

def main(args: Array[String]): Unit = {

val sparkConf = new SparkConf().setMaster("local[*]").setAppName("direct")

val ssc = new StreamingContext(sparkConf,Seconds(3))

//定义kafka相关参数

val kafkaPara :Map[String,Object] = Map[String,Object](ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG ->"node01:9092,node02:9092,node03:9092",

ConsumerConfig.GROUP_ID_CONFIG->"kafka",

"key.deserializer"->"org.apache.kafka.common.serialization.StringDeserializer",

"value.deserializer" -> "org.apache.kafka.common.serialization.StringDeserializer"

)

//通过读取kafka数据,创建DStream

val kafkaDStream:InputDStream[ConsumerRecord[String,String]] = KafkaUtils.createDirectStream[String,String](

ssc,LocationStrategies.PreferConsistent,

ConsumerStrategies.Subscribe[String,String](Set("kafka"),kafkaPara)

)

//提取出数据中的value部分

val valueDStream :DStream[String] = kafkaDStream.map(record=>record.value())

//wordCount计算逻辑

valueDStream.flatMap(_.split(" "))

.map((_,1))

.reduceByKey(+)

.print()

ssc.start()

ssc.awaitTermination()

开启Kafka集群

开启Kafka生产者,产生数据

kafka-console-producer.sh --broker-list node01:9092,node02:9092,node03:9092 --topic kafka

运行程序,接收Kafka生产的数据并进行相应处理

查看消费进度

kafka-consumer-groups.sh --describe --bootstrap-server node01:9092,node02:9092,node03:9092 --group kafka

相关推荐
ZhengEnCi21 小时前
05-自注意力机制详解 🧠
人工智能·pytorch·深度学习
学网安的肆伍1 天前
【043-WEB攻防篇】PHP应用&SQL注入&符号拼接&请求方法&HTTP头&JSON&编码类
sql·安全·php
渣渣盟1 天前
Flink并行数据源:ClickSource实现详解
flink·scala
为儿打call1 天前
SparkSQL 广播超时排查:小表但是多分区 = BroadcastTimeout
大数据·spark
渣渣盟1 天前
Flink单流转换算子实战解析
flink·scala
Shan12051 天前
站在计算机领域视角看:SQL注入攻击
网络·数据库·sql
轻刀快马1 天前
别干背八股文了:从一场“双十一秒杀”惨案,看懂 InnoDB 事务、锁与索引的底层齿轮
数据库·sql
_Evan_Yao1 天前
内存映射文件与零拷贝:Kafka、RocketMQ 飞升的秘密通道
分布式·kafka·rocketmq
xier_ran1 天前
【BUG问题】5060Ti显卡Windows配置Anaconda中的CUDA及Pytorch,sm_120问题
人工智能·pytorch·windows
计算机毕业编程指导师1 天前
【Python大数据项目推荐】基于Hadoop+Django脑卒中风险分析系统源码解析 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·spark·毕业设计·脑卒中