我可以使用 Apache Kafka 作为批处理层来保存 Lambda 架构中的历史数据吗?
Can I use Apache Kafka as for Batch Layer to save historical data in Lambda Architecture?
作为存储系统的 Kafka 可以作为长期数据的数据存储。它可以毫无问题地复制和分发。那么我可以从 Kafka 中的所有历史数据创建 RDD 并创建批处理视图,然后将它与 Spark Streaming Views 结合起来吗?
tl;dr 是的,但为什么呢?
根据前 Twitter 和 Lambda 架构作者 Nathan Marz 的说法,这些是批处理层中主数据集的存储要求:
- "Efficient appends of new data." 必须很容易添加到主数据集中。
- "Scalable storage." 批处理层需要保存 所有 架构曾经见过的数据 "forever,"根据您的情况,可能达到 PB。
- "Support for parallel processing." 进入服务层的批处理视图需要将函数应用于主数据集,因此这些必须并行 运行 所以他们在世界末日来临之前完成。
- "Enforceable immutability." 进行检查以防止原始数据发生突变是至关重要的,这是您所做的一切的真实来源。
- "Tunable storage and processing costs." 批处理层需要让您灵活地决定如何存储和压缩静态和计算中的数据。
Kafka 满足所有这些,因此从技术上讲,它确实可以将主数据集存储在您的批处理层中。
然而,由 Jay Kreps(前 LinkedIn)设计的 Kappa Architecture 比 Lambda 架构更容易使用——我想说更能有效地满足物联网等现代用例。实现它所需要做的就是分布式、可扩展、不可变、可配置的流,这正是 Kafka 提供的。那么,为什么不这样做呢?
在 Lambda 架构的批处理层中使用 Kafka 进行数据存储是对其功能的充分利用——唯一的目的是将其强制进入一个实际上随着时间的推移效率降低的架构。
作为存储系统的 Kafka 可以作为长期数据的数据存储。它可以毫无问题地复制和分发。那么我可以从 Kafka 中的所有历史数据创建 RDD 并创建批处理视图,然后将它与 Spark Streaming Views 结合起来吗?
tl;dr 是的,但为什么呢?
根据前 Twitter 和 Lambda 架构作者 Nathan Marz 的说法,这些是批处理层中主数据集的存储要求:
- "Efficient appends of new data." 必须很容易添加到主数据集中。
- "Scalable storage." 批处理层需要保存 所有 架构曾经见过的数据 "forever,"根据您的情况,可能达到 PB。
- "Support for parallel processing." 进入服务层的批处理视图需要将函数应用于主数据集,因此这些必须并行 运行 所以他们在世界末日来临之前完成。
- "Enforceable immutability." 进行检查以防止原始数据发生突变是至关重要的,这是您所做的一切的真实来源。
- "Tunable storage and processing costs." 批处理层需要让您灵活地决定如何存储和压缩静态和计算中的数据。
Kafka 满足所有这些,因此从技术上讲,它确实可以将主数据集存储在您的批处理层中。
然而,由 Jay Kreps(前 LinkedIn)设计的 Kappa Architecture 比 Lambda 架构更容易使用——我想说更能有效地满足物联网等现代用例。实现它所需要做的就是分布式、可扩展、不可变、可配置的流,这正是 Kafka 提供的。那么,为什么不这样做呢?
在 Lambda 架构的批处理层中使用 Kafka 进行数据存储是对其功能的充分利用——唯一的目的是将其强制进入一个实际上随着时间的推移效率降低的架构。