Maven项目配置spark Structured Streaming+kafka
结构化数据流中的关键思想是将实时数据流视为一个不断附加的表。这导致新的流处理模型与批处理模型非常相似。您将把流式计算表示为标准批量查询,就像在静态表上一样,Spark将它作为无界输入表上的增量查询来运行。让我们更详细地了解这个模型。
基本概念
将输入数据流视为“输入表”。每个到达流中的数据项就像一个新的行被添加到输入表中。
对输入的查询将生成“结果表”。每一个触发间隔(比如说,每隔1秒),新的行会被添加到输入表中,最终更新结果表。每当结果表得到更新时,我们都希望将已更改的结果行写入外部接收器。
“输出”被定义为写出到外部存储器的内容。输出可以用不同的模式定义:
完整模式 - 整个更新后的结果表将被写入外部存储器。由存储连接器决定如何处理整个表格的写入。
追加模式 - 自上次触发后,只有在结果表中追加的新行才会写入外部存储器。这仅适用于预期不会更改结果表中现有行的查询。
更新模式 - 只有自上次触发以来在结果表中更新的行才会写入外部存储器(自Spark 2.1.1起可用)。请注意,这与完整模式不同之处在于,此模式仅输出自上次触发后更改的行。如果查询不包含聚合,则它将等同于“追加”模式。
建立kafka集成链接
事件时间窗口操作
滑动事件时间窗口上的聚合对结构化流式处理来说很简单,并且与分组聚合很相似。在分组聚合中,为用户指定的分组列中的每个唯一值维护聚合值(例如计数)。在基于窗口的聚合中,对于行所在的事件时间所在的每个窗口,都会保留聚合值。让我们用插图来理解这一点。
想象一下,我们的快速示例已被修改,现在流包含行和生成行的时间。我们希望在10分钟的时间内对单词进行计数,而不是每5分钟更新一次。也就是说,在10分钟的时间12:00 - 12:10,12:05 - 12:15,12:10 - 12:20等之间收到的文字的字数统计。请注意,12:00 - 12:10表示数据在12:00之后但在12:10之前抵达。现在,考虑在12:07收到的一个词。这个词应该递增对应于两个窗口12:00 - 12:10和12:05 - 12:15的计数。因此计数将由两个分组键(即单词)和窗口(可以从事件时间计算)索引。
http://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html
由于这个窗口类似于分组,在代码中,你可以使用groupBy()和window()操作来表达窗口聚集。
Spark和kafka的maven配置
<groupId>structed-Streaming04</groupId>
<artifactId>spark_01</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql-kafka-0-10_2.11</artifactId>
<version>2.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.10.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-tags -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-tags_2.11</artifactId>
<version>2.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>0.10.0.1</version>
</dependency>
</dependencies>
版本号必须严格按照官方文档的配置
Spark-sql-kafka版本为 2.3.0
Kafka版本为0.10.0.1
Scala版本为2.11.8
Maven官网配置
http://mvnrepository.com/artifact/org.apache.spark/spark-sql-kafka-0-10_2.11/2.3.0