Kafka Streams是用于构建应用程序和微服务的client library,其中输入和输出数据存储在Kafka集群中。 它结合了在客户端编写和部署标准Java和Scala应用程序的简便性以及Kafka服务器端集群技术的优势。
Line app使用了kafka stream,除此之外,世界上很多著名的应用程序也使用了kafka.
Kafka Streams的一些亮点:
- 设计为简单轻量级的客户端库,可以轻松地将其嵌入任何Java应用程序中,并与用户为其流应用程序所拥有的任何现有打包,部署和操作工具集成。
- 除了Apache Kafka本身作为内部消息传递层之外,对系统没有任何外部依赖性;值得注意的是,它使用Kafka的分区模型来水平扩展处理,同时保持有力的订购保证。
- 支持容错本地状态,该状态可实现非常快速和有效的有状态操作,例如窗口连接和聚合。
- 支持一次精确的处理语义,以确保即使在处理过程中Streams客户端或Kafka代理发生故障时,每条记录也只会被处理一次。
- 采用一次一个记录的处理以实现毫秒级的处理延迟,并支持基于事件时间的窗口操作以及记录的无序到达。
- 提供必要的流处理原语,以及高级Streams DSL和低级Processor API。
下面我们一起来学习一下kafka的核心概念.
Stream Processing Topology-流处理拓扑
- 流是Kafka Streams提供的最重要的抽象:它表示无限制的,不断更新的数据集。 流是不可变数据记录的有序,可重播和容错序列,其中数据记录定义为键值对。
- 任何使用Kafka Streams库的程序都是一个流处理应用程序。 它通过一个或多个 processor topologies处理器拓扑定义其计算逻辑,其中处理器拓扑是由流(edges)连接的流处理器(nodes)的图。
- 流处理器stream processor 是处理器拓扑中的一个节点node 。 它表示一个处理步骤,通过一次从topology中的上游处理器接收一个输入记录,对其应用操作,来转换流中的数据,然后可以向其下游处理器生成一个或多个输出记录。
拓扑topology中有两个特殊processors 处理器:
- Source Processor: Source Processor源处理器是一种特殊类型的流处理器, source processor没有任何上游处理器。 它通过使用一个或多个Kafka topic的记录,并将它们转发到其下游处理器,从而从一个或多个Kafka topic生成一个输入到其拓扑topology的流。
即source processor接收topic的输入发送给下游processor - Sink Processor: Sink Processor接收器处理器是一种特殊类型的流处理器,它没有下游处理器。 它将所有从上游处理器接收到的记录发送到指定的Kafka topic。
即Sink Processor下游没有Processor,而是将收到的消息发送给topic.
另外我们需要注意,在普通处理器节点中,在处理当前记录时也可以访问其他远程系统 remote systems。 因此,处理后的结果可以流回Kafka或写入外部系统。
Kafka Streams提供了两种定义流处理拓扑的方法:Kafka Streams DSL提供了最通用的数据转换操作,例如开箱即用的map,filter,join和aggregation方法。更加底层的 Processor API 允许开发人员定义和连接自定义处理器以及与状态存储进行交互。
处理器拓扑processor topology仅仅是流处理代码的逻辑抽象。 在运行时,将在应用程序内部实例化并复制逻辑拓扑以进行并行处理
Time时间
流处理中的一个关键点是时间的概念,以及如何对其进行建模和集成。 例如,某些操作是基于时间边界定义的。
流中常见的时间概念是:
- Event time 事件或数据记录发生的时间点,即最初是在“source”上创建的。 示例:如果事件是汽车中GPS传感器报告的地理位置变化,则关联的事件时间将是GPS传感器捕获位置变化的时间。
- Processing time 即当流处理应用程序开始进行处理 事件或数据记录的时间点,即记录被消耗时的时间点。 处理时间可能比原始事件时间晚几毫秒,几小时或几天等。 示例:设想一个分析应用程序读取并处理从汽车传感器报告的地理位置数据,并将其呈现给车队管理仪表板。 在这里,分析应用程序中的处理时间可能是事件发生后的毫秒或秒(例如,基于Apache Kafka和Kafka Streams的实时管道)或几小时(例如,基于Apache Hadoop或Apache Spark的批处理管道)。
- Ingestion time Kafka broker将事件或数据记录存储在主题分区中的时间点。 和