流处理简介
作者:Charles Mahler / 用例, 开发者
2023年10月13日
导航至
本文最初发布于 The New Stack,经许可在此转载。
在大数据分析领域,流处理已成为一种至关重要的范式,正在重塑企业与数据交互的方式。但什么是流处理?为什么越来越多的企业使用它?
流处理是一种在数据生成时持续摄取、分析和处理数据的方法。与传统批处理(数据在一段时间内收集,然后分块处理)不同,流处理在数据收集时对其进行操作,在数据到达的毫秒到秒内提供洞察和操作。正确实施这种方法的主要好处是
- 实时洞察
- 运营效率
- 改善数据分析师和最终用户的用户体验
- 提高可扩展性
在本文中,您将概述流处理系统的结构,并了解一些用于实施流处理系统的最流行工具。
流处理架构
流处理系统的架构可能因正在处理的数据量而异,但在较高层面,核心组件将保持不变。让我们看看这些组件是什么以及它们在流处理系统中的作用
- 数据生产者 — 要开始流处理,您需要一些数据来处理,这意味着您首先需要创建数据的东西。一些常见的数据生产者包括 物联网传感器、生成指标或用户活动数据的软件应用程序以及金融数据。生成的数据量和频率将影响流处理系统中其他组件所需的架构。
- 数据摄取 — 流处理系统的数据摄取组件对于确保可靠性和可扩展性至关重要。数据摄取层负责从各种来源捕获数据,并在数据发送到处理之前充当数据缓冲区。适当的数据摄取层将确保以容错方式收集数据,以便在处理之前不会丢失任何数据,并防止数据量的短期增加使流处理系统不堪重负。
- 数据处理 — 这是流处理系统的核心,实时分析、数据转换、过滤或丰富等操作都在这里执行。根据数据量以及需要对数据执行的操作,此组件可以是简单的 Python 脚本,也可以是分布式计算框架。
- 数据存储 — 在许多情况下,一旦使用流处理完成实时分析,仍然需要存储数据以进行历史分析或存档。常见的解决方案包括 数据仓库、时间序列数据库 和对象存储。
流行的流处理工具
现在您已经了解了流处理系统的架构,让我们看看一些用于实施流处理并执行摄取、处理和存储数据任务的常用工具。
InfluxDB
InfluxDB 是一个开源时间序列数据库,这使其非常适合许多 流处理系统,这些系统处理来自物联网、金融和应用程序性能监控等应用程序的时间序列数据。
InfluxDB 经过优化,可支持高容量写入吞吐量以及跨时间范围和聚合的高效查询,如流处理中所示。InfluxDB 还能够使用廉价的对象存储来持久化数据,这使其非常适合长期存储流处理数据以进行历史分析。
Telegraf
Telegraf 是一个开源服务器代理,用于收集、处理和输出数据。Telegraf 拥有超过 300 多个不同的插件,用于输入和输出,用户无需编写代码即可轻松地与几乎任何数据源集成。
Telegraf 可以被视为将流处理系统的不同组件粘合在一起的解决方案。Telegraf 可以充当数据摄取工具,弥合各种数据源和数据处理层之间的差距。通过使用其广泛的输入和输出插件库,Telegraf 可以实时捕获来自不同通信协议(如 HTTP、应用程序、数据库或物联网设备)的数据。Telegraf 也有用于数据处理的插件,因此对于某些工作负载,它也可以充当数据处理层的角色,并对收集的数据进行基本分析。
Kafka
Apache Kafka 是一个分布式事件流平台,经过优化,可用于构建实时数据管道和流应用程序。在流处理系统中,Kafka 既充当消息代理,又充当存储系统,确保生产者和消费者之间的高吞吐量和容错数据流。
生产者将数据推送到 Kafka 主题,而消费者拉取此数据进行处理。凭借其内置的流处理功能,Kafka 允许使用 Kafka Streams 直接在平台内进行实时数据转换、聚合和丰富。其处理大量事件的能力使其成为实时分析、监控和事件驱动架构的首选解决方案。
Amazon Kinesis
AWS Kinesis 是一套专门设计用于处理 AWS 平台上的实时流数据的工具。在流处理架构中,Kinesis 充当数据摄取和处理管道。Kinesis Data Streams 每秒可以从数百个来源(如日志、社交媒体提要或物联网遥测数据)捕获千兆字节的数据。
一旦摄取,就可以使用 Kinesis Data Analytics 和 SQL 查询立即处理这些数据,或与 AWS Lambda 等其他服务集成以实现自定义处理逻辑。Kinesis Data Firehose 简化了将流数据交付到 Amazon S3、Amazon Redshift 或 Elasticsearch 等目标位置以进行进一步分析或存储的过程。
Grafana
Grafana 是一个用于监控和可视化的开源平台。一旦数据被流处理系统摄取、处理和存储,Grafana 就可以利用这些数据源,提供反映流数据当前状态的实时仪表板。通过与流场景中常用的数据库(如 InfluxDB、Prometheus 或 Kafka)集成,Grafana 提供了一个动态窗口,用于了解数据流的脉搏。
用户可以可视化指标、设置警报和叠加历史数据以进行比较分析。Grafana 允许用户将原始数据流转换为可操作的洞察,使用户能够快速响应新兴趋势或异常。
AWS Lambda
AWS Lambda 是一个无服务器计算平台,允许开发人员在无需预置或管理服务器的情况下运行代码以响应特定事件。在流处理的上下文中,AWS Lambda 可以在处理实时数据方面发挥关键作用。当数据通过 Amazon Kinesis 或 Amazon S3 等来源流入时,可以触发 Lambda 函数来即时处理、转换或分析此数据。
无论是用于实时分析、数据清理、丰富还是将数据路由到其他服务,Lambda 都能确保操作快速执行,并根据传入数据量自动扩展。这种无服务器方法不仅简化了摄取和响应数据流的过程,还优化了成本,因为用户只需为实际使用的计算时间付费。
Apache Spark
Apache Spark 是一个分布式数据处理引擎,其中包括 Spark Streaming,这是一个专门为实时数据分析量身定制的组件。Spark Streaming 可以从 Kafka 或 Kinesis 等各种来源摄取数据。然后,它将传入数据分成微批次,这些微批次使用 Spark 的分布式计算功能进行处理。这种微批处理方法虽然不是纯粹的实时处理,但可以实现接近实时的处理,且延迟极低。处理后的数据可以轻松地与 Spark 的批处理、机器学习或图处理模块集成,从而实现统一的分析方法。
Node-RED
Node-RED 是一个基于流程的编程工具,使用户能够将设备、API 和在线服务连接在一起。作为流处理系统的一部分,Node-RED 可以充当直观的中间层,促进数据在源和处理端点之间的平滑流动。凭借其拖放界面,用户可以可视化设计数据流、集成各种输入源、应用转换并将数据路由到各种流处理工具或数据库。
Node-RED 在物联网场景中尤其受欢迎,它可以从传感器、设备 或外部 API 收集数据,使用自定义逻辑或预定义节点实时处理数据,然后将其转发到 Apache Kafka、MQTT 代理或时间序列数据库等平台以进行进一步分析。其灵活性和可扩展性使 Node-RED 成为快速原型化和部署流处理工作流程的绝佳工具,而无需深入研究代码。
下一步
在快速发展的数据分析领域,流处理已成为企业和组织利用实时数据潜力的关键技术。我们探索的工具和框架,从 Kafka 强大的数据流到 Grafana 深刻的可视化,都让我们得以一窥促进实时决策的解决方案领域。
然而,理解和选择合适的工具仅仅是开始。下一步是深入研究每种工具的细微之处,为您的特定用例选择合适的工具,并根据项目中可能不断变化的需求进行迭代。在致力于构建生产流处理系统之前,获得 这些工具的实践经验,并测试和原型化不同的解决方案以查看哪种效果最佳,是常用的最佳实践。