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

相关推荐
墨绿色的摆渡人13 分钟前
pytorch小记(二十一):PyTorch 中的 torch.randn 全面指南
人工智能·pytorch·python
kaixiang30022 分钟前
sqli-labs靶场23-28a关(过滤)
数据库·sql
张伯毅1 小时前
Flink SQL 将kafka topic的数据写到另外一个topic里面
sql·flink·kafka
lqjun08271 小时前
PyTorch实现CrossEntropyLoss示例
人工智能·pytorch·python
小蜗笔记2 小时前
显卡、Cuda和pytorch兼容问题
人工智能·pytorch·python
L耀早睡3 小时前
mapreduce打包运行
大数据·前端·spark·mapreduce
TiDB 社区干货传送门3 小时前
从40秒到11毫秒:TiDB环境下一次SQL深潜优化实战
数据库·sql·tidb
TY-20254 小时前
数据库——SQL约束&&窗口函数介绍
数据库·sql·oracle
java1234_小锋4 小时前
SQL里where条件的顺序影响索引使用吗?
数据库·sql
元6335 小时前
Spark处理过程-案例数据清洗
spark