Structured-Streaming+kafka流式处理

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


猜你喜欢

转载自blog.csdn.net/qq_35703919/article/details/80018440
今日推荐