我可以使用Apache Kafka作为批处理层来保存Lambda架构中的历史数据吗?

时间:2017-04-06 17:43:13

标签: apache-spark apache-kafka spark-streaming batch-processing lambda-architecture

Kafka作为存储系统可以是长期数据的数据存储。它可以毫无问题地复制和分发。那么我可以从Kafka中的所有历史数据创建RDD并创建批处理视图,然后将其与Spark Streaming Views结合使用吗?

1 个答案:

答案 0 :(得分:1)

tl; dr是的,但为什么?

前身为Twitter和Lambda架构作者的Nathan Marz表示,这些是批量图层中主数据集的存储要求:

  • “有效添加新数据。”必须很容易添加到主数据集中。
  • “可扩展存储。”批处理层需要保存所有架构所见过的“永远”,这可能会达到数PB,具体取决于您的情况。
  • “支持并行处理。”进入服务层的批处理视图需要将功能应用于主数据集,因此这些必须并行运行,以便在启示时间之前完成我们。
  • “可强制执行的不变性。”制定检查以防止原始数据发生突变至关重要,这是您所做事情的真相来源。
  • “可调整的存储和处理成本。”批处理层需要让您灵活地决定如何在静止和计算中存储和压缩数据。

Kafka满足所有这些要求,因此从技术上讲,它确实可以将主数据集存储在批处理层中。

然而,由Jay Kreps(以前的LinkedIn)设计的Kappa Architecture比Lambda架构更容易使用 - 我认为更有效地满足像物联网这样的现代用例。实现这一目标所需要的只是分布式,可扩展,不可变,可配置的流,这正是Kafka提供的。那么为什么不这样做呢?

在Lambda架构的批处理层中使用Kafka进行数据存储是为了充分利用其功能 - 其唯一目的是将其强制为一种实际上效率较低的架构。