在21世纪初期,当我刚从事软件工程工作时,数据分析往往在软件系统设计完成后才会被考虑到。对于业务分析师来说,如果批处理作业能够每天运行一次,从运营数据库中提取数据,并将其加载到数据仓库中,让他们能够查看前一天或上周的数据、创建报告、运行一次性查询等,他们就非常满足了。
除了特意编写的高度优化的查询操作之外,面向用户的分析理念几乎是不存在的:为成千上万的并发用户提供基于最新数据的分析工作。自那以来,人们对实时数据分析的需求已经大幅增加。欺诈检测、资源规划、内容推荐、预测分析等用例都需要最新的数据才能提供价值。例如,如果银行检测到你的信用卡被盗刷,你会希望银行立即冻结它,而不是等到明天,对吗?
Apache Kafka(用于数据流)、Apache Flink(流处理)、Apache Pinot(数据分析)和Apache Superset(数据可视化)等工具和平台为实时分析提供了良好的基础,并在过去几年中得到了巨大的发展。与此同时,当你开始实施第一个用例时,仍然可能面临挑战,你可能会问自己一些问题,比如:出于不同目的,该选择什么样的工具?如何将各个部分组合在一起,形成一个连贯的解决方案?投入生产时会存在哪些挑战?如何克服这些挑战?
Mark的这本书是解决这些问题和许多其他问题的宝贵指南。他从基础知识(实时分析到底是什么)开始,全面概述了该领域的软件生态系统,书中还讨论了作为领先实时分析平台之一的Apache Pinot,并深入研究了生产考虑因素以及诸如地理空间查询和更新操作(这是大多分析型数据库中众所周知的棘手部分)等更具体的方面。
我在Debezium[一个用于变更数据捕获(Change Data Capture,CDC)的开源平台]上工作了很多年,看到整章内容专门讨论这个主题感到特别高兴。CDC在实时数据管道中扮演着重要角色,它的一个核心用例是将来自运营数据库(如MySQL或PostgreSQL)的实时数据更改传送到诸如Apache Pinot之类的分析平台。在Debezium社区,这种情况一次又一次地出现。作为一名经验丰富的CDC用户,Mark出色地解释了CDC的关键用例和实施方法,并展示了如何在综合示例中设置Debezium。
对细节的高度关注和实用的动手风格是整本书的一个关键特色:任何概念性的讨论都会伴随着实际的示例,这让读者能够详细地了解如何将不同的想法和技术付诸实践。这本书非常适合从头到尾阅读,当然,如果你想深入了解某个特定主题,也可以选择对应的章节来阅读。
我们周围的世界是实时的,我们构建的任何软件系统都需要考虑到这一事实。随着你实施自己的分析用例以获得对数据的实时洞察,这本书将很快派上用场,我相信它将在你的办公桌上长期占据重要的位置。
Gunnar Morling
2023年6月于德国汉堡