一、摘要
Spark Streaming 是 Apache Spark 提供的实时数据流处理框架,它支持从多种数据源(如 Kafka、Flume、HDFS 等)接收数据,并进行实时处理。Kafka 是一个高性能的分布式消息队列系统,常用于构建实时数据流管道。将两者结合使用,可以构建高吞吐量、高可靠性的实时数据处理系统。
在大数据处理场景中,实时数据流处理是一个重要的应用方向。本文将介绍如何使用 Spark Streaming 结合 Kafka 构建实时数据处理管道,并将处理结果存储到 MySQL 数据库中。
二、环境简介
我们的示例系统架构包含以下几个组件:
- 消息队列kafka_2.11-2.4.1:作为数据源,接收员工信息数据
- Spark Streaming 2.3.2:从 Kafka 消费数据,进行实时处理
- 数据库MySQL8.0+ :存储处理后的员工信息
三、实验过程
- 整体流程:数据生产者将员工信息发送到 Kafka 主题,Spark Streaming 从 Kafka 消费这些数据,进行解析和转换,然后将数据写入 MySQL 数据库。
- 实验步骤:
-
确保MySQL数据库中存在employee表,如不存在,则执行如下SQL语句先创建testdb数据库和employee表:
CREATE DATABASE testdb; USE testdb; CREATE TABLE employee ( employee_id INT PRIMARY KEY, employee_name VARCHAR(50), job_title VARCHAR(50), manager_id INT, hire_date VARCHAR(20), salary INT, bonus INT, department_id INT );
-
在IDEA中创建maven工程
-
添加相关依赖到pom.xml中,核心依赖如下:
<properties> <scala.version>2.11.8</scala.version> <spark.version>2.3.2</spark.version> <spark.artifact.version>2.11</spark.artifact.version> <hadoop.version>2.7.4</hadoop.version> </properties> <dependencies> <!-- 引入Spark依赖 --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_${spark.artifact.version}</artifactId> <version>${spark.version}</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_${spark.artifact.version}</artifactId> <version>${spark.version}</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming_${spark.artifact.version}</artifactId> <version>${spark.version}</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>${hadoop.version}</version> </dependency> <!-- 引入MySQL驱动依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <!-- 引入Kafka client和stream依赖 --> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-streams</artifactId> <version>2.0.0</version> </dependency> <!-- 引入spark-streaming-Kafka依赖 --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming-kafka-0-10_2.11</artifactId> <version>2.3.2</version> </dependency> <!-- 引入日志依赖 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17
-