spark-streaming direct stream的部分实现原理

本文探讨了 Spark Streaming 中实现 Exactly-once 消费模式的技术细节。通过介绍 RDDStream 的创建过程及其与 Kafka 的集成方式,展示了如何利用 Spark Streaming 处理 Apache Kafka 中的数据,并确保消息消费的精确一次语义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    今天看了一片介绍spark-streaming direct stream的实现原理,文章在这个地址(内容加载比较慢,打开链接后等几分钟内从才能显示出来):

Exactly-once Spark Streaming from Apache Kafka

    总结一下几点:

    1. spark-streaming其实是根据interval创建了rdd stream。在创建rdd的时候,首先根据上次读取的偏移量定义rdd,然后再根据刚才定义的rdd实际接收数据,产生rdd

    2.  HasOffsetRanges,对应于每个topic的每个partition,在rdd中都有一个HasOffsetRanges表示

    3.  spark-streaming的kafka默认consume消息是At-most-once模式,但是如果想要实现Exactly-once模式,会消耗很大的资源来保存每个rdd partition的offset。比如说在上面的文章里面,使用了如下标红的代码来读取rdd partition的offset

 stream.foreachRDD { rdd =>
      <span style="color:#ff0000;">rdd.foreachPartition { iter =>
        // make sure connection pool is set up on the executor before writing
        SetupJdbc(jdbcDriver, jdbcUrl, jdbcUser, jdbcPassword)
 
        iter.foreach { case (key, msg) =>
          DB.autoCommit { implicit session =>
            // the unique key for idempotency is just the text of the message itself, for example purposes
            sql"insert into idem_data(msg) values (${msg})".update.apply
          }</span>
        }
      }
    }









    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值