流处理入门

导航到

本文最初发布在The New Stack,并在此获得授权转载。

在大数据分析领域,流处理已经崛起为一个关键范式,重塑了企业如何与数据互动。但什么是流处理,为什么越来越多的企业正在使用它呢?

流处理是一种持续摄取、分析和对生成数据进行操作的的方法。与传统的批量处理不同,传统的批量处理会在一段时间内收集数据,然后分批处理,流处理则在数据收集时即进行操作,在数据到达的毫秒到秒内提供洞察和行动。当这种方法得到适当实施时,其主要优点包括:

  • 实时洞察
  • 运营效率
  • 提高数据分析师和最终用户的用户体验
  • 提高可扩展性

在本文中,您将了解流处理系统的结构概述,并学习一些用于实现流处理系统的最受欢迎的工具。

流处理架构

流处理系统的架构会因处理的数据量而有所不同,但就高层次而言,核心组件将保持不变。让我们来看看这些组件是什么,以及它们在流处理系统中的角色。

  • 数据生产者 — 要开始流处理,您需要一些数据来处理,这意味着您需要某种最初创建数据的东西。常见的数据生产者包括物联网传感器、生成指标或用户活动数据的软件应用程序,以及金融数据。产生的数据量和频率将影响流处理系统中其他组件所需的架构。
  • 数据摄取 — 流处理系统的数据摄取组件对于确保可靠性和可伸缩性至关重要。数据摄取层是捕获来自各种来源的数据,并在将其发送到处理之前充当数据缓冲区。合适的数据摄取层将确保以容错方式收集数据,以便在处理之前不会丢失任何数据,并且还可以防止短期数据量增加而使流处理系统不堪重负。
  • 数据处理 — 这是流处理系统的核心,在这里会进行实时分析、数据转换、过滤或增强等操作。根据数据量和需要对数据进行什么操作,此组件可以是简单的Python脚本,也可以是分布式计算框架。
  • 数据存储 — 在许多情况下,一旦使用流处理完成实时分析,仍可能需要存储数据以进行历史分析或归档。常见解决方案包括数据仓库时间序列数据库和对象存储。

现在您已经了解了流处理系统的架构,让我们看看一些常见的工具,用于实现流处理以及执行摄取、处理和存储数据的任务。

InfluxDB

InfluxDB 是一个开源的时间序列数据库,对于处理物联网、金融和应用程序性能监控等应用的时间序列数据流处理系统来说,它是一个理想的解决方案。

InfluxDB 优化了支持高写入吞吐量和跨时间范围以及聚合的高效查询,这些对于流处理非常重要。InfluxDB 还能够使用廉价的对象存储来持久化数据,这使得它非常适合长期存储您的流处理数据以进行历史分析。

Telegraf

Telegraf 是一个开源的服务器代理,用于收集、处理和输出数据。Telegraf 拥有超过 300 种不同的插件 用于输入和输出,使用户能够轻松地与几乎任何数据源集成,而无需编写代码。

Telegraf 可以视为连接流处理系统不同组件的解决方案。Telegraf 可以作为数据摄取工具,在多样化的数据源与数据处理层之间架起桥梁。通过使用其广泛的输入和输出插件库,Telegraf 可以实时捕获来自不同的通信协议(如HTTP、应用程序、数据库或物联网设备)的数据。Telegraf 还具有数据处理的插件,因此对于某些工作负载,它也可以充当数据处理层的角色,并在收集数据时对数据进行基本分析。

Kafka

Apache Kafka 是一个针对构建实时数据处理管道和流式应用程序优化的分布式事件流平台。在流处理系统中,Kafka 既可以作为消息代理,也可以作为存储系统,确保生产者和消费者之间高吞吐量和容错的数据流。

生产者将数据推送到 Kafka 主题,而消费者则从 Kafka 拉取这些数据进行处理。凭借其内置的流处理能力,Kafka 允许在 Kafka Streams 平台上直接进行实时数据转换、聚合和丰富。它处理大量事件的能力使其成为实时分析、监控和事件驱动架构的首选解决方案。

Amazon Kinesis

AWS Kinesis 是一套专门针对 AWS 平台上处理实时流数据的工具。在流处理架构中,Kinesis 起着数据摄取和处理管道的作用。Kinesis Data Streams 可以每秒从数百个来源,如日志、社交媒体或物联网遥测中捕获数 GB 的数据。

一旦摄取数据,就可以立即使用 Kinesis Data Analytics 进行 SQL 查询处理,或与其他服务如 AWS Lambda 集成以进行自定义处理逻辑。Kinesis Data Firehose 简化了将流数据传输到 Amazon S3、Amazon Redshift 或 Elasticsearch 等目的地的过程,以便进行进一步分析或存储。

Grafana

Grafana 是一个开源的监控和可视化平台。一旦流处理系统摄取、处理并存储了数据,Grafana 就可以访问这些数据源,提供反映流数据当前状态的实时仪表板。通过与流场景中常用的数据库(如 InfluxDB、Prometheus 或 Kafka)集成,Grafana 为数据流的脉搏提供了一个动态窗口。

用户可以可视化指标、设置警报并在比较分析中叠加历史数据。Grafana 允许用户将原始数据流转换为可操作见解,使用户能够迅速应对新趋势或异常。

metrics visualization

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

在物联网场景中特别受欢迎的 Node-RED 可以从传感器、设备 或外部 API 收集数据,使用自定义逻辑或预定义节点实时处理它,然后将数据转发到 Apache Kafka、MQTT 代理或时间序列数据库进行进一步分析。其灵活性和可扩展性使 Node-RED 成为快速原型设计和部署流处理工作流程的优秀工具,而无需深入代码。

下一步

在数据分析快速发展的世界中,流处理已成为企业和组织利用实时数据潜力的一种关键技术。我们从 Kafka 的强大数据流到 Grafana 的洞察性可视化所探讨的工具和框架,为我们展示了促进实时决策解决方案的广阔天地。

然而,理解和选择合适的工具只是开始。下一步是深入了解每个工具的细微差别,选择适合您特定用例的工具,并根据项目可能变化的实际需求进行迭代。在承诺构建生产流处理系统之前,通过这些工具获得实际操作经验、测试和原型设计不同的解决方案以查看哪个效果最佳是常见的最佳实践。