Kafka 流处理

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

Kafka Streams

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

为什么使用 Kafka Streams?

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

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

流处理

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

流处理拓扑

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

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

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

Kafka Stream Processing

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

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

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

  • Kafka Streams DSL: 它建立在流处理器 API 之上。在这里,DSL 扩展为"领域特定语言"。主要推荐给初学者。
  • 处理器 API: 此 API 主要由开发人员用来定义任意流处理器,一次处理一条接收到的记录。此外,它将这些处理器与其状态存储连接起来,以构成处理器拓扑。这种组合拓扑代表了一个定制的处理逻辑。

正如我们所见,生产者以文本格式向 Kafka 发送数据,通常称为 JSON 格式。 JSON 有一个缺点,即数据是以字符串形式存储的。这会创建多个重复记录以存储在 Kafka 主题中。因此,它占用大量磁盘空间。因此,需 ...