pVi*_*aca 7 streaming bigdata apache-spark amazon-kinesis
我们使用连接到AWS Kinesis流的Spark Streaming,以便聚合(每分钟)我们收到的指标,并将聚合写入Influxdb,以便将它们提供给实时仪表板.
一切都运行良好,但我们现在正在考虑如何管理系统的部署和最终故障的暂停.
文档说Kinesis集成库已经为故障,检查点等做好了准备,但我想澄清检查点是如何在那里工作的.
Kinesis接收器使用Amazon在亚马逊软件许可(ASL)下提供的Kinesis客户端库(KCL)创建输入DStream.KCL构建于Apache 2.0许可的AWS Java SDK之上,并通过Workers,Checkpoints和Shard Leases的概念提供负载平衡,容错,检查点.
我们可以为kinesis定义检查点间隔,但据我所知,它仅用于标记直到我们消耗了指标的流的哪个点.所以,我们仍然需要使用火花流的检查点功能,对吧?
由于我们每分钟聚合数据,我们的批处理间隔为60秒,但在这60秒内,我们不断从流中接收数据.
这是我的问题:
提前致谢!
不能百分百确定这将是您问题的完整答案,因为检查点解决方案是相当复杂的组件,每个子问题可能需要一个单独的问题。不过,也许这可以提供有关该过程的一些线索:
检查点工作在 DStream 级别,因此这意味着您可以在管道的不同阶段执行检查点。它可以是 Spark 从接收器生成的块创建第一个 RDD 的时刻,也可以是转换后的 RDD,您可以在计算指标后在后续阶段获得它。因此,当您调用 stop 时(如果您优雅地停止它),您将获得检查点的状态,以及在您的接收器在管道中选择的点停止后处理的最后一个 RDD。
检查点由称为 JobGenerator 的 Spark 组件触发。在运行作业之前,它将生成用于计算 RDD 的 DStream。在此步骤中,如果配置了检查点,则该 DStream 的每个 RDD 将另外创建检查点元数据,并且 RDD 将被标记为需要检查点的 RDD。然后 SparkContext 将运行生成的作业,最后它将调用 doCheckpoint 方法,该方法将检查点数据保存到配置的位置。JobGenerator 将为此创建一个单独的作业,因此您预计实际作业完成和检查点持久性之间会存在一些延迟
每次 Spark 运行您的应用程序时,它都会根据您的检查点数据创建流上下文。因此,假设您的指标处于状态 7,例如在您的 Kenesis 接收器停止后上次 Spark 关闭时,那么当您的流上下文恢复时,它将再次处于状态 7,并且仅从新的 kenesis 数据生成下一批将其置于状态 8
好吧,这取决于您如何构建您的产品。也许只有在您的依赖项成功处理数据后才进行检查点才有意义(因此我建议应用重试机制以避免短期连接问题)。但信息太少,无法给你完整的答案
| 归档时间: |
|
| 查看次数: |
894 次 |
| 最近记录: |