【发布时间】:2017-07-13 10:12:05
【问题描述】:
我想实时处理在网络服务器上报告的消息。 Web 服务器上报告的消息属于不同的会话,我想做一些会话级别的聚合。为此,我计划使用 Kafka 前端的 Spark Streaming。甚至在我开始之前,我已经列出了这个架构将面临的一些挑战。熟悉这个生态系统的人可以帮我解决这些问题吗:
- 如果每个 Kafka 消息都属于特定会话,如何管理会话亲缘关系,以便同一个 Spark 执行器看到链接到会话的所有消息?
- 如何确保 Spark 执行器按照它们在 Kafka 报告的顺序处理属于会话的消息?我们能否在不限制线程数和产生处理开销(如按消息时间戳排序)的情况下以某种方式实现这一目标?
- 何时检查会话状态?如果执行器节点崩溃,如何从最后一个检查点恢复状态?在驱动节点崩溃的情况下,如何从最后一个检查点恢复状态?
- 如果节点(执行程序/驱动程序)在检查点状态之前崩溃,如何恢复状态?如果 Spark 通过重播消息重新创建状态 RDD,那么它从哪里开始重播 Kafka 消息:病房上的最后一个检查点,还是它处理重新创建分区所需的所有消息? Spark 流式处理是否可以/是否跨多个 Spark 流式处理批次或仅针对当前批次恢复状态,即如果在最后一批期间未完成检查点,是否可以恢复状态?
【问题讨论】:
标签: apache-spark apache-kafka spark-streaming bigdata