在本节内容中,我们将从更高层面的视角审视实时分析应用程序的生态系统,并识别其核心组件及其各自职责。我们不仅会探究每个单独组件的功能,还会深入研究这些组件之间的交互关系。
实时洞察并非由单一组件独立产出,而是多个组件协同工作的成果。因此,为了更全面地掌握实时分析生态系统,至少需要了解那些负责数据生成、存储、洞察生成以及洞察信息应用的组件。最好在编写代码之前,将这些组件的关系草图勾勒在白板上,这将有助于形成一个清晰的大局观。
你可能好奇为何我们在提到“流处理技术栈”时会特别使用“现代”这个定语。图2-5揭示了这一称呼背后的几个关键理由。
现代流处理技术栈涵盖了以下关键组件:
图2-5:现代流处理技术栈
云原生工具
现代流处理技术栈专为配合当代的云原生工具而构建,技术栈中的组件旨在充分利用云平台所提供的弹性计算和存储能力,在组件设计上支持在Kubernetes及容器化环境中部署,以实现高度可伸缩性和可用性,满足动态的云基础设施要求。
托管平台与无服务器平台
当前大多数技术栈组件都支持在主流云平台上进行自助托管。这与早期的经典技术栈形成鲜明对比,是一个巨大的优势——那时我们常常需要在本地数据中心手动部署Hadoop集群和Hadoop的分布式文件系统(HDFS)等。现在的自助服务平台极大地减轻了管理工作的负担,并且内置了监控等功能。这意味着用户无须亲自记录、追踪或测量事件处理之间的延迟,这些工作都将由平台自动完成。
丰富的工具和流畅的开发者体验
现代流处理技术栈的组件也非常适合开发者,不仅为开发者提供了丰富的工具,还确保了流畅的开发体验。这些工具支持本地测试和调试,内置了监控功能,并且与持续集成工具无缝集成,以加速部署过程。许多工具还提供了单个命令部署的便捷性,这在早期的实时分析系统中是难以想象的。
表达性编程模型
现代流处理技术栈的最后一个关键组成部分是表达性编程模型。与经典的流处理技术栈相比,后者通常依赖于命令式编程语言(如Java或Scala),这些语言更关注任务的执行方式而非任务本身。而现代工具大多支持以SQL为主要查询语言,这不仅使得开发者能够专注于要完成的任务而非执行细节,而且由于SQL的普及,它还降低了入门门槛,使更多开发者能够参与其中。
综上所述,现代流处理技术栈借助自助式云原生工具,对经典流处理技术栈进行了现代化改造,为构建实时分析应用提供了一个简化而强大的开发者体验。这一技术栈的灵感源自Jay Kreps于2014年提出的Kappa架构。
不同于Lambda架构,现代流处理技术栈的一切都围绕着事件建模,且不再需要两个独立的处理层。图2-6概述了本章将探讨的组件。虽然不是每个应用程序都必须使用所有这些组件,但在某些情况下,至少会用到其中的一部分。
图2-6:实时分析技术栈
对于每个组件,我们将解释在为该角色选择工具时需要考虑的关键特征,并简要介绍一些主流的实现方法。