内容提要
Apache Spark™ Structured Streaming是一种流处理平台,构建在Spark SQL引擎之上,提供可扩展性和容错性。Databricks上的Structured Streaming使用率呈指数增长,每周运行超过1400万个作业。Structured Streaming工作负载分为分析和操作两类,操作工作负载强调对数据的及时转换和操作。Databricks的性能改进提高了有状态流水线的延迟,为具有严格延迟SLA的工作负载提供了更好的支持。
延伸解读
有状态流水线的延迟优化效果
根据基准测试,在DBR 13.3 LTS中,有状态流水线的端到端延迟显著降低。例如,流聚合的p99延迟减少87%,流-流连接的p99延迟减少83%,去重操作的p99延迟减少93%,flatMapGroupsWithState的p99延迟减少66%。这些改进在吞吐量超过10万事件/秒的工作负载中可实现3-4倍的延迟降低,为具有严格延迟SLA的实时应用提供了更好支持。
状态存储提供者的选择建议
Structured Streaming提供两种状态存储实现:HDFS-backed和RocksDB。HDFS-backed将状态存储在JVM内存中,可能因状态增长导致内存溢出和垃圾回收暂停。RocksDB将状态维护在RocksDB实例中,并定期备份到分布式文件系统。Databricks推荐在生产工作负载中使用RocksDB,以避免JVM堆内存问题,尤其当状态大小超过数百万键时。
性能改进的适用条件与版本
所有性能改进均在DBR 13.3 LTS及更高版本中可用。基准测试基于AWS i3.2xlarge实例(8核61GB RAM),使用一个驱动和五个工作节点,并采用RocksDB状态存储。测试还优化了shuffle分区数。因此,要获得文中所述的延迟降低效果,需确保运行环境满足这些条件,并升级到相应版本。
Q&A
Apache Spark Structured Streaming 是什么?它有什么特点?
Apache Spark Structured Streaming 是一个构建在 Spark SQL 引擎之上的流处理平台,提供可扩展性和容错性。
Structured Streaming 工作负载主要分为哪两类?操作类工作负载有什么特点?
Structured Streaming 工作负载主要分为分析型和操作型两类。操作型工作负载运行在业务的实时关键部分,强调对数据的及时转换和操作,使组织能够快速处理传入数据、做出运营决策并基于实时洞察触发即时行动。
有状态流水线为什么需要状态管理?它适用于哪些场景?
有状态流水线需要在多个微批次之间保持状态,以完成跨记录聚合等操作,并且状态需要在流水线重启后仍然可用。它主要用于实时用例,如产品和内容推荐、欺诈检测、服务健康监控等。
Databricks 推荐在生产工作负载中使用哪种状态存储提供者?为什么?
Databricks 推荐使用 RocksDB 状态存储提供者。因为随着时间推移,状态大小通常会增长到超过数百万个键,使用 RocksDB 可以避免 HDFS 状态存储提供者常见的内存不足问题或垃圾回收导致的缓慢。
Project Lightspeed 的性能改进对有状态流水线的延迟有多大提升?
根据基准测试,使用改进后的 DBR 13.3 LTS,对于吞吐量超过 10 万事件/秒的工作负载,有状态流水线的延迟可减少高达 3-4 倍。具体基准中,延迟降低幅度在 p95 和 p99 上分别可达 65%-78% 和 66%-93%。
这些性能改进在哪个 Databricks Runtime 版本中可用?
所有提到的功能在 DBR 13.3 LTS 版本中可用。