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


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Structured Streaming 是 Apache Spark 的一种流式处理引擎,它可以帮助我们对流式数据进行转换、处理和聚合。Structured Streaming 使用了基于 SQL 的语法,因此我们可以使用熟悉的 SQL 语句来对流式数据进行操作。例如,我们可以使用以下 SQL 语句对流式数据进行过滤: ``` SELECT * FROM stream WHERE value > 5 ``` 或者使用以下 SQL 语句对流式数据进行分组并计算每组的平均值: ``` SELECT key, AVG(value) FROM stream GROUP BY key ``` Structured Streaming 还支持联机处理,即可以对流式数据进行实时处理,并将结果实时输出。这使得我们可以使用 Structured Streaming 实现各种实时数据处理任务,如实时统计、实时分析等。 ### 回答2: 结构化流式处理Structured Streaming)是一种用于处理实时数据数据处理引擎。它允许开发人员使用SQL查询实时流数据,无需编写复杂的流式处理程序。Structured Streaming SQL是一种使用SQL语句对实时数据进行查询和操作的方式。 Structured Streaming SQL可以通过Spark SQL的语法和功能来处理实时数据。它可以将实时数据以表的形式表示,并且支持标准SQL查询操作,例如选择、过滤、聚合和连接操作。在Structured Streaming SQL中,开发人员可以使用常见的SQL函数和操作符来处理实时数据Structured Streaming SQL还支持时间窗口操作,可以通过指定窗口长度和滑动步长来对实时数据进行分组和聚合。此外,Structured Streaming SQL还支持流-静态表连接,可以将实时流数据与静态数据进行关联操作,以便获得更丰富的分析结果。 Structured Streaming SQL的一个主要特点是其容错性和弹性。当发生故障或数据丢失时,Structured Streaming可以自动从上次检查点恢复,并且能够动态调整计算资源以适应数据的变化。 总而言之,Structured Streaming SQL提供了一种简单、灵活且易于使用的方式来处理和分析实时数据。通过使用SQL语句,开发人员可以更快地构建和迭代实时数据处理应用程序,从而更好地理解和利用实时数据的价值。 ### 回答3: Structured StreamingSpark提供的一种流处理方式,可以使用SQL语句来对流式数据进行处理和分析。它使用了DataFrame和Dataset这两种抽象概念,提供了与传统批处理相似的编程模型,可以方便地进行处理任务。 与传统的流处理方式相比,Structured Streaming具有以下特点: 1. 连接机制:Structured Streaming可以连接各种输入源和输出目标,如Kafka、消息队列等,方便处理不同来源和去向的数据。 2. 强大的API支持:Structured Streaming提供了丰富的API,可以通过SQL语句或DataFrame/Dataset API来执行流处理任务,使得开发人员可以使用熟悉的SQL语言进行处理操作。 3. 实时处理Structured Streaming支持实时处理,可以以毫秒级的延迟来处理数据,使得我们能够实时处理数据流并及时生成结果。 4. 容错性:Structured Streaming具有高度的容错性,能够自动处理失败和恢复。它使用了Spark的弹性分布式数据集(RDD)来进行数据处理,一旦发生故障,它可以自动从上一次处理的结果继续进行处理。 5. 一致性:Structured Streaming保证了事件的顺序和一致性,保证数据的完整性和正确性。 6. 扩展性:Structured Streaming具有良好的扩展性,可以根据实际需求进行水平扩展,以满足大规模数据处理的需求。 结构化流处理SQL的使用可以极大地简化流处理任务的编写和维护,使得开发人员能够更加专注于业务逻辑的实现。通过使用结构化流处理SQL,我们可以方便地进行各种流处理操作,包括过滤、转换、聚合以及窗口操作等,同时可以借助Spark的优化能力来提高处理性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值