Kafka 流处理

2025年3月17日 | 阅读 3 分钟

到目前为止,我们已经学习了主题、分区、向 Kafka 发送数据以及从 Kafka 消费数据。 这可能是一个较低级别的抽象。 因此,需要更高层次的抽象。 因此,引入了 Kafka Streams 的概念。

Kafka Streams

通常,流定义了随时间提供的数据元素的流动。 在 Apache Kafka 中,流是事实或记录(键值对)的连续实时流。 Kafka Streams 是一个轻量级的内置客户端库,用于构建不同的应用程序和微服务。 流的输入和输出数据都存储在 Kafka 集群中。 Kafka Streams 集成了在客户端编写和部署标准 Java 和 Scala 应用程序的简单性。

为什么选择 Kafka Streams?

以下属性描述了 Kafka Streams 的使用:

  1. Kafka Streams 具有高度的可扩展性和弹性。
  2. 可以部署到容器、云、裸机等。
  3. 它适用于任何规模的用例,即小型、中型或大型。
  4. 它具有容错能力。 如果发生任何故障,Kafka Streams 可以处理。
  5. 它允许编写标准 Java 和 Scala 应用程序。
  6. 对于流式传输,它不需要任何单独的处理集群。
  7. Mac、Linux 以及 Windows 操作系统都支持 Kafka Streams。
  8. 除了 Kafka 本身之外,它没有任何外部依赖项。

Stream 处理

与数据流编程类似,流处理允许一些应用程序更简单、更容易地利用有限形式的并行处理。 因此,流处理使应用程序的并行执行变得简单。 业务方使用称为流处理软件/应用程序的软件来实现核心功能。

流处理拓扑

Apache Kafka 将流作为最重要的抽象概念提供。 流是可偿还的、有序的以及容错的不变记录序列。

流处理应用程序是一个使用 Kafka Streams 库的程序。 它需要一个或多个处理器拓扑来定义其计算逻辑。 处理器拓扑以图形方式表示,其中“流处理器”是其节点,每个节点通过“流”作为其边连接。

流处理器表示转换流中数据的步骤。 它一次从拓扑中存在的上游处理器接收一条输入记录,应用其操作,最后将其一条或多条输出记录生成到其下游处理器。

Kafka Stream Processing

拓扑中存在以下两个主要处理器:

  1. 源处理器: 没有上游处理器的流处理器类型。 该处理器从一个或多个主题使用数据,并为其拓扑生成输入流。
  2. Sink 处理器: 这是一种没有下游处理器的流处理器。 此处理器的工作是将从其上游处理器接收到的数据发送到指定的主题。

此外,Kafka Streams 提供了两种表示流处理拓扑的方法:

  1. Kafka Streams DSL: 它建立在 Stream Processors API 之上。 在这里,DSL 扩展为“领域特定语言”。 强烈推荐给初学者。
  2. Processor API: 此 API 主要供开发人员使用,用于定义任意流处理器,这些处理器一次处理一条接收到的记录。 此外,它将这些处理器与其状态存储连接起来,以组成处理器拓扑。 该组合拓扑表示自定义的处理逻辑。