【发布时间】:2016-06-25 20:01:06
【问题描述】:
我们使用连接到 AWS Kinesis 流的 Spark Streaming 来聚合(每分钟)我们接收的指标并将聚合写入 influxdb 以使它们可用于实时仪表板。
一切正常,但我们现在正在考虑如何管理部署暂停和系统最终故障。
文档说 Kinesis 集成库已经为故障、检查点等做好了准备,但我想澄清一下检查点是如何在那里工作的。
Kinesis 接收器使用 Amazon 根据 Amazon 软件许可 (ASL) 提供的 Kinesis Client Library (KCL) 创建输入 DStream。 KCL 构建在 Apache 2.0 许可的 AWS Java 开发工具包之上,并通过工人、检查点和分片租赁的概念提供负载平衡、容错和检查点。
我们可以定义 kinesis 的检查点间隔,但据我了解,这仅用于标记我们消耗了指标的流的哪个点。所以,我们仍然需要使用 Spark Streaming 中的检查点功能,对吧?
当我们每分钟聚合数据时,我们的批处理间隔为 60 秒,但在这 60 秒内,我们不断地从流中接收数据。
这是我的问题:
- 当我执行 JavaStreamingContext.stop(...) 时(为了部署新版本的作业),接收器将停止并在最后更新检查点?
- 火花流检查点何时发生?每次执行作业后?以前?
- 假设我们的两个检查点都在工作,我们如何保证发生故障时的一致性?似乎每次流式检查点发生时,它都需要同时对运动进行检查点,否则我们可以结束再次读取相同的数据。我们该如何处理?
- 如果底层服务(在本例中为 influxdb)宕机了,我该怎么办?实施重试机制?如果是这样,它需要在一段时间后停止重试,否则我们将耗尽内存。
提前致谢!
【问题讨论】:
标签: apache-spark streaming amazon-kinesis bigdata