StructuredStreaming与Kafka整合案例(pyspark版本)

使用pyspark中的structruedStreaming和kafka整合,错误比较多,解决了大量的兼容问题,全文亲测可用。

一、官网

http://spark,apache.org/docs/latest/structured-streaming-kafka-integration.html

Apache Kafka 是目前最流行的一个分布式的实时流消息系统,给下游订阅消费系统提供了并行处理和可靠容错机制

现在大公司在流式数据的处理场景,Kafka基本是标配。

Structured streaminq能够很好的集成Kafka,从Kafka拉取消息,然后就可以把流数据看做一个DataFrame,一张无限增长的大表,在这个大表上做查询,Structured Streaming保证了端到端的exactly-once,用户只需要关心业务即可,不用费心去关心底层是怎么做的Structuredstreaming既可以从Kafka读取数据,还可以向Kafka写入数据.

Structured Streaming + Kafka Integration Guide (Kafka broker version 0.10.0 or higher) - Spark 3.5.3 Documentation

读取数据:kafkaSource

二、实操案例

1、实时ETL

package com.bigdata.moni;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class StationLog {

        private String stationId;
        private String callOut;
        private String callIn;
        private String callStatus;
        private long callTime;
        private int duration;

}
package com.bigdata.moni;

import lombok.val;
import org.apache.kafka.clients.producer.*;

import java.util.List;
import java.util.Properties;
import java.util.Random;

public class SendStationLogProducer {


    public static void main(String[] args) throws InterruptedException {
        Properties properties = new Properties();
        // 这个里面肯定有给哪个服务器哪个topic发消息
        // 设置连接kafka集群的ip和端口
        proper
Spark StreamingKafka整合案例: 1. 项目背景 本案例是一个实时数据处理项目,主要使用Spark Streaming和Kafka进行数据处理和传输。数据源为Kafka,数据处理和计算使用Spark Streaming,最终将结果输出到MySQL数据库中。 2. 技术架构 本案例的技术架构如下: 数据源:Kafka 数据处理和计算:Spark Streaming 数据存储:MySQL 3. 实现步骤 1)创建Kafka生产者,向Kafka中写入数据。 2)创建Spark Streaming应用程序,从Kafka中读取数据。 3)对读取到的数据进行处理和计算。 4)将计算结果输出到MySQL数据库中。 4. 代码示例 以下是本案例的代码示例: 1)Kafka生产者代码: from kafka import KafkaProducer producer = KafkaProducer(bootstrap_servers='localhost:9092') for i in range(10): producer.send('test', b'message %d' % i) producer.close() 2)Spark Streaming代码: from pyspark.streaming.kafka import KafkaUtils from pyspark.streaming import StreamingContext from pyspark import SparkContext, SparkConf conf = SparkConf().setAppName('KafkaSparkStreaming').setMaster('local[2]') sc = SparkContext(conf=conf) ssc = StreamingContext(sc, 5) kafkaParams = {"metadata.broker.list": "localhost:9092"} stream = KafkaUtils.createDirectStream(ssc, ["test"], kafkaParams) lines = stream.map(lambda x: x[1]) counts = lines.flatMap(lambda line: line.split(" ")).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b) counts.pprint() ssc.start() ssc.awaitTermination() 3)MySQL代码: import mysql.connector cnx = mysql.connector.connect(user='root', password='password', host='localhost', database='test') cursor = cnx.cursor() add_data = ("INSERT INTO word_count (word, count) VALUES (%s, %s)") data = [('hello', 1), ('world', 2), ('spark', 3)] for d in data: cursor.execute(add_data, d) cnx.commit() cursor.close() cnx.close() 5. 总结 本案例使用Spark Streaming和Kafka进行实时数据处理和传输,并将结果输出到MySQL数据库中。通过本案例的实现,可以深入了解Spark Streaming和Kafka的使用方法和技术原理,为实际项目的开发提供参考和借鉴。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闫哥大数据

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值