Structred Streaming之Streaming Query分析

Structred Streaming之Streaming Query分析

  1. 在用户的应用程序中,用户会调用DataStreamWriter.start()方法发起一个Streaming query。
  2. 在DataStreamWriter中,会调用df.sparkSession.sessionState.streamingQueryManager.startQuery方法开始查询。
  3. StreamingQueryManager调用createQuery私有方法创建Query。

    private def createQuery(
          userSpecifiedName: Option[String],
          userSpecifiedCheckpointLocation: Option[String],
          df: DataFrame,
          sink: Sink,
          outputMode: OutputMode,
          useTempCheckpointLocation: Boolean,
          recoverFromCheckpointLocation: Boolean,
          trigger: Trigger,
          triggerClock: Clock): StreamingQueryWrapper

    StreamingQueryWrapper是StreamExecution的一个Wrapper:

    class StreamExecution(
        override val sparkSession: SparkSession,
        override val name: String,
        checkpointRoot: String,
        analyzedPlan: LogicalPlan,
        val sink: Sink,
        val trigger: Trigger,
        val triggerClock: Clock,
        val outputMode: OutputMode)
      extends StreamingQuery with ProgressReporter with Logging
  4. StreamingQueryManager调用query.streamingQuery.start()方法,在StreamExecution中启动microBatchThread线程,在该线程中执行runBatches()核心方法。
    • 在triggerExecutor.execute()方法中触发事件处理:
      • 从故障中恢复:populateStartOffsets(),从Sink中恢复,避免重复处理
      • 正常情况:constructNextBatch() ,轮训所有数据源,看是否有新数据需要处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值