在咱们以前的Kafka教程中,咱们讨论了Kafka中的ZooKeeper。今天,在这个Kafka Streams教程中,咱们将学习Kafka中Streams的实际含义。此外,咱们将看到Kafka Stream架构,用例和Kafka流功能。此外,咱们将讨论Apache Kafka中的流处理拓扑。java
Kafka Streams是一个用于构建应用程序和微服务的客户端库,尤为是输入和输出数据存储在Apache Kafka Clusters中。基本上,凭借Kafka服务器端集群技术的优点,Kafka Streams结合了编写的简单性以及在客户端部署标准Java和Scala应用程序。 linux
那么,让咱们从Apache Kafka Streams开始吧。apache
首先,咱们来讨论一下Stream和Real-Time Kafka Processing服务器
咱们称之为Kafka Stream处理,能够连续,同时,逐条记录地实时处理数据。架构
Kafka中的实时处理是Kafka的应用之一。 app
基本上,Kafka实时处理包括连续的数据流。所以,在分析了这些数据以后,咱们从中得到了一些有用的数据。如今,在谈到Kafka时,实时处理一般涉及从主题(源)读取数据,进行一些分析或转换工做,而后将结果写回另外一个主题(接收器)。要作这种类型的工做,有几种选择。 框架
咱们可使用Kafka Consumer编写本身的自定义代码来读取数据并经过Kafka Producer写入数据。 分布式
或者咱们使用完整的流处理框架,如Spark Streaming,Flink,Storm等。
可是,有一个替代上述选项,即Kafka Streams。那么,让咱们了解Kafka Streams。ide
Kafka Streams是一个客户端库,咱们使用它来处理和分析存储在Kafka中的数据。它依赖于重要的流处理概念,例如正确区分事件时间和处理时间,窗口支持,简单而有效的管理以及应用程序状态的实时查询。
此外,Kafka Streams的入门门槛低,这意味着咱们能够在一台机器上快速编写和运行小规模的概念验证。为此,咱们只须要在多台机器上运行咱们的应用程序的其余实例,以扩展到大批量生产工做负载。此外,经过利用Kafka的并行模型,它能够透明地处理同一应用程序的多个实例的负载平衡。
与Kafka Streams相关的一些要点:
Kafka Streams拓扑中的两个特殊处理器是:
它是一种特殊类型的流处理器,没有任何上游处理器。经过使用来自一个或多个Kafka主题的记录并将其转发到其下游处理器,它会为其拓扑生成输入流。
与源处理器不一样,此流处理器没有下游处理器。基本上,它将从其上游处理器接收的任何记录发送到指定的Kafka主题。
阅读Apache Kafka Security | Kafka的需求和组件
注意:在处理当前记录时,也能够在普通处理器节点中访问其余远程系统。所以,处理后的结果能够流回Kafka或写入外部系统。
基本上,经过构建Kafka生产者和消费者库并利用Kafka的本机功能来提供数据并行性,分布式协调,容错和操做简单性,Kafka Streams简化了应用程序开发。
让咱们修改Kafka架构
下图描述了使用Kafka Streams库的应用程序的解剖结构。
可是,对于存储和传输,Kafka的消息传递层对数据进行分区。一样,对于处理数据,Kafka Streams对其进行分区。所以,咱们能够说分区是实现数据局部性,弹性,可伸缩性,高性能和容错的缘由。在并行化的背景下,Kafka Streams和Kafka之间有着密切的联系:
看看Kafka的优势和缺点
此外,经过将应用程序的处理器拓扑分解为多个任务,它能够进行缩放。可是,在应用程序的输入流分区的基础上,Kafka Streams建立了固定数量的任务,每一个任务都分配了Kafka输入流中的分区列表(即Kafka主题)。 此外,无需人工干预,Kafka流任务既能够独立处理,也能够并行处理。
下图描述了两个任务,每一个任务分配了输入流的一个分区。
Kafka Streams容许用户配置库可用于在应用程序实例中并行化进程的线程数。可是,凭借其独立的处理器拓扑,每一个线程能够执行一个或多个任务。例如,下面的图像描述了一个运行两个流任务的流线程。
Kafka Streams提供所谓的国营商店。基本上,咱们使用它来经过流处理应用程序存储和查询数据,这是实现有状态操做时的一项重要功能。例如,当您调用有状态运算符(例如join()或aggregate())或者窗口化流时,Kafka Streams DSL会自动建立和管理此类状态存储。
在Kafka Streams应用程序中,每一个流任务能够嵌入一个或多个本地状态存储,甚至API也能够访问存储并查询处理所需的数据。此外,Kafka Streams等本地国营商店提供容错和自动恢复功能。
想知道Apache Kafka职业范围 - 请点击连接
下图描述了两个流任务及其专用的本地状态存储。
让咱们用它的Command来探索Apache Kafka Operations
可是,它集成在Kafka中,它基于容错功能。虽然流数据持久保存到Kafka,但即便应用程序失败并须要从新处理它也可用。此外,为了处理故障,Kafka Streams中的任务利用了Kafka消费者客户端提供的容错功能。
此外,这里的本地国营商店也很容易出现故障。所以,它维护一个复制的更改日志Kafka主题,在该主题中,它跟踪每一个状态存储的任何状态更新。若是任务在另外一台计算机上失败并从新启动的任务上运行,则Kafka Streams会保证在失败以前经过重播相应的更改日志主题来恢复其关联的状态存储到内容以前的内容。所以,故障处理对最终用户彻底透明。
咱们来讨论Apache Kafka Monitoring - Methods&Tools
基本上,使用Kafka Streams构建,流处理应用程序看起来像:
Properties streamsConfiguration = new Properties(); streamsConfiguration.put(StreamsConfig.APPLICATION_ID_CONFIG, “Streaming-QuickStart”); streamsConfiguration.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, “localhost:9092”); streamsConfiguration.put(StreamsConfig.KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName()); streamsConfiguration.put(StreamsConfig.VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
String topic = configReader.getKStreamTopic(); String producerTopic = configReader.getKafkaTopic(); final Serde stringSerde = Serdes.String(); final Serde longSerde = Serdes.Long();
KStreamBuilder builder = new KStreamBuilder();
KStream <String,String> inputStreamData = builder.stream(stringSerde,stringSerde,producerTopic);
KStream <String,Long> processedStream = inputStreamData.mapValues(record - > record.length())
除了链接和聚合操做以外,还有为KStream提供的其余转换操做的列表。所以,这些操做中的每个能够生成一个或多个KStream对象。此外,能够将一个或多个链接的处理器转换为底层处理器拓扑。此外,为了组成复杂的处理器拓扑,全部这些转换方法均可以连接在一块儿。
在这些转换中,filter,map,mapValues等是无状态转换操做,用户可使用它们将自定义函数做为参数传递,例如过滤器的谓词,地图的KeyValueMapper等,根据它们在语言。
让咱们了解Kafka Tools
processedStream.to(stringSerde,longSerde,topic);
这里,即便在内部结构初始化以后,处理也不会开始。所以,经过调用start()方法,咱们必须显式启动Kafka Streams线程:
KafkaStreams streams = new KafkaStreams(builder,streamsConfiguration);
streams.start();
所以,最后一步是关闭Stream。
为了将已发布的内容实时存储和分发到为读者提供的各类应用程序和系统,它使用Apache Kafka和Kafka Streams。
Zalando使用Kafka做为ESB(企业服务总线)做为欧洲领先的在线时尚零售商。这有助于他们从单一服务架构过渡到微服务架构。此外,使用Kafka处理事件流,他们的技术团队能够实现近乎实时的商业智能。
为了相互通讯,LINE使用Apache Kafka做为其服务的中央数据中心。与Line同样,天天产生数千亿条消息,用于执行各类业务逻辑,威胁检测,搜索索引和数据分析。此外,Kafka帮助LINE可靠地转换和过滤主题,使消费者能够有效消费的子主题同时保持易于维护。
为了为其广告基础设施的实时预测预算系统提供动力,Pinterest大规模使用Apache Kafka和Kafka Streams。Kafka Streams的支出预测比以往任什么时候候都更准确。
让咱们来修改卡夫卡的特点
Apache Kafka支持数字神经系统,Rabobank的商务活动巴士。它是荷兰三大银行之一。经过使用Kafka Streams,该服务能够实时向客户发出金融事件的警报。
所以,咱们已经详细了解了Apache Kafka Streams的概念。咱们讨论了流处理和实时处理。此外,咱们看到了Stream Processing Topology及其特殊处理器。以后,咱们转向Kafka Stream架构并实施Kafka Streams。最后,咱们研究了Kafka Streams的功能和用例