1.目标

在我们之前的Kafka教程中,我们讨论了Kafka中的ZooKeeper。今天,在这个Kafka Streams教程中,我们将学习Kafka中Streams的实际含义。此外,我们将看到Kafka Stream架构,用例和Kafka流功能。此外,我们将讨论Apache Kafka中的流处理拓扑。

Kafka Streams是一个用于构建应用程序和微服务的客户端库,尤其是输入和输出数据存储在Apache Kafka Clusters中。基本上,凭借Kafka服务器端集群技术的优势,Kafka Streams结合了编写的简单性以及在客户端部署标准JavaScala应用程序。

那么,让我们从Apache Kafka Streams开始吧。

Kafka Streams | 流和实时处理

首先,我们来讨论一下Stream和Real-Time Kafka Processing

2.卡夫卡的流和实时处理

我们称之为Kafka Stream处理,可以连续,同时,逐条记录地实时处理数据。

Kafka中的实时处理是Kafka的应用之一

基本上,Kafka实时处理包括连续的数据流。因此,在分析了这些数据之后,我们从中获得了一些有用的数据。现在,在谈到Kafka时,实时处理通常涉及从主题(源)读取数据,进行一些分析或转换工作,然后将结果写回另一个主题(接收器)。要做这种类型的工作,有几种选择。

我们可以使用Kafka Consumer编写自己的自定义代码来读取数据并通过Kafka Producer写入数据

或者我们使用完整的流处理框架,如Spark StreamingFlink,Storm等。
但是,有一个替代上述选项,即Kafka Streams。那么,让我们了解Kafka Streams。

3. Kafka Streams是什么?

Kafka Streams是一个客户端库,我们使用它来处理和分析存储在Kafka中的数据。它依赖于重要的流处理概念,例如正确区分事件时间和处理时间,窗口支持,简单而有效的管理以及应用程序状态的实时查询。

此外,Kafka Streams的入门门槛低,这意味着我们可以在一台机器上快速编写和运行小规模的概念验证。为此,我们只需要在多台机器上运行我们的应用程序的其他实例,以扩展到大批量生产工作负载。此外,通过利用Kafka的并行模型,它可以透明地处理同一应用程序的多个实例的负载平衡。

与Kafka Streams相关的一些要点:

  • Kafka Stream可以轻松嵌入到任何Java应用程序中,并与用户为其流应用程序提供的任何现有打包,部署和操作工具集成,因为它是一个简单轻量级的客户端库。
  • Apache Kafka本身以外的系统没有外部依赖关系作为内部消息传递层。
  • 为了实现非常快速和有效的有状态操作(窗口连接和聚合),它支持容错本地状态。
  • 为了保证每个记录只处理一次,即使在处理过程中Streams客户端或Kafka代理发生故障时也只处理一次,它只提供一次处理语义。
  • 为了实现毫秒级处理延迟,采用一次记录一次处理。此外,随着记录的延迟到来,它支持基于事件时间的窗口操作。
  • 除了高级Streams DSL和低级处理器API之外,它还提供必要的流处理原语。

4.卡夫卡的流处理拓扑

  • Kafka Streams最重要的抽象是一个。基本上,它代表了一个无限的,不断更新的数据集。换句话说,在订单,可重放和容错的不可变数据记录序列中,数据记录被定义为键值对,我们称之为流。
  • 此外,任何使用Kafka Streams库的程序都是流处理应用程序。通过一个或多个处理器拓扑,它定义其计算逻辑,尤其是在处理器拓扑是通过流(边缘)连接的流处理器(节点)的图形的情况下。
  • 在Stream处理器拓扑中,有一个节点我们称之为流处理器。它表示通过从拓扑中的上游处理器一次接收一个输入记录,将其操作应用于其中来转换流中的数据的处理步骤。此外,可以随后向其下游处理器产生一个或多个输出记录。

在卡夫卡得分 - 测试你的知识

Kafka Streams拓扑中的两个特殊处理器是:

一个。源处理器

它是一种特殊类型的流处理器,没有任何上游处理器。通过使用来自一个或多个Kafka主题的记录并将其转发到其下游处理器,它会为其拓扑生成输入流。

湾 接收器处理器

与源处理器不同,此流处理器没有下游处理器。基本上,它将从其上游处理器接收的任何记录发送到指定的Kafka主题
阅读Apache Kafka Security | Kafka的需求和组件
注意:在处理当前记录时,也可以在普通处理器节点中访问其他远程系统。因此,处理后的结果可以流回Kafka或写入外部系统。

Kafka流处理器拓扑

5. Kafka Streams Architecture

基本上,通过构建Kafka生产者和消费者库并利用Kafka的本机功能来提供数据并行性,分布式协调,容错和操作简单性,Kafka Streams简化了应用程序开发。
让我们修改Kafka架构
下图描述了使用Kafka Streams库的应用程序的解剖结构。

Kafka Streams Architecture

一个。流分区和任务

但是,对于存储和传输,Kafka的消息传递层对数据进行分区。同样,对于处理数据,Kafka Streams对其进行分区。因此,我们可以说分区是实现数据局部性,弹性,可伸缩性,高性能和容错的原因。在并行化的背景下,Kafka Streams和Kafka之间有着密切的联系:

  • 每个Kafka流分区按顺序是一系列数据记录,并映射到Kafka主题分区。
  • 流中的数据记录映射到该主题的Kafka消息。
  • 在Kafka和Kafka Streams中,数据记录的密钥决定了数据的分区,即数据记录的密钥决定了到主题内特定分区的路由。

看看Kafka的优点和缺点
此外,通过将应用程序的处理器拓扑分解为多个任务,它可以进行缩放。但是,在应用程序的输入流分区的基础上,Kafka Streams创建了固定数量的任务,每个任务都分配了Kafka输入流中的分区列表(即Kafka主题)。 此外,无需人工干预,Kafka流任务既可以独立处理,也可以并行处理。
下图描述了两个任务,每个任务分配了输入流的一个分区。

Kafka流体系结构 - 流分区和任务

湾 线程模型

Kafka Streams允许用户配置库可用于在应用程序实例中并行化进程的线程数。但是,凭借其独立的处理器拓扑,每个线程可以执行一个或多个任务。例如,下面的图像描述了一个运行两个流任务的流线程。

测试你在卡夫卡的位置

Kafka流体系结构 - 线程模型

C。当地的国家商店

Kafka Streams提供所谓的国营商店。基本上,我们使用它来通过流处理应用程序存储和查询数据,这是实现有状态操作时的一项重要功能。例如,当您调用有状态运算符(例如join()或aggregate())或者窗口化流时,Kafka Streams DSL会自动创建和管理此类状态存储。
在Kafka Streams应用程序中,每个流任务可以嵌入一个或多个本地状态存储,甚至API也可以访问存储并查询处理所需的数据。此外,Kafka Streams等本地国营商店提供容错和自动恢复功能。
想知道Apache Kafka职业范围 - 请点击链接
下图描述了两个流任务及其专用的本地状态存储。

Kafka溪流 - 本地商店

让我们用它的Command来探索Apache Kafka Operations

d。容错

但是,它集成在Kafka中,它基于容错功能。虽然流数据持久保存到Kafka,但即使应用程序失败并需要重新处理它也可用。此外,为了处理故障,Kafka Streams中的任务利用了Kafka消费者客户端提供的容错功能。

此外,这里的本地国营商店也很容易出现故障。因此,它维护一个复制的更改日志Kafka主题,在该主题中,它跟踪每个状态存储的任何状态更新。如果任务在另一台计算机上失败并重新启动的任务上运行,则Kafka Streams会保证在失败之前通过重播相应的更改日志主题来恢复其关联的状态存储到内容之前的内容。因此,故障处理对最终用户完全透明。
我们来讨论Apache Kafka Monitoring - Methods&Tools

6.实施Kafka Streams

基本上,使用Kafka Streams构建,流处理应用程序看起来像:

A提供流配置

Properties streamsConfiguration = new Properties();
streamsConfiguration.put(StreamsConfig.APPLICATION_ID_CONFIG, “Streaming-QuickStart”);
streamsConfiguration.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, “localhost:”);
streamsConfiguration.put(StreamsConfig.KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
streamsConfiguration.put(StreamsConfig.VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());

B 获取主题和Serdes

String topic = configReader.getKStreamTopic();
String producerTopic = configReader.getKafkaTopic();
final Serde stringSerde = Serdes.String();
final Serde longSerde = Serdes.Long();

破解卡夫卡专访的秘诀

C。构建流和获取数据

KStreamBuilder builder = new KStreamBuilder(); 
KStream <String,String> inputStreamData = builder.stream(stringSerde,stringSerde,producerTopic);

d。卡夫卡流的处理

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。

7. Kafka Streams的特点

  1. 最佳功能是弹性,高可扩展性和容错性。
  2. 部署到容器,VM,裸机,云。
  3. 对于小型,中型和大型用例,它同样可行。
  4. 它完全与Kafka安全集成。
  5. 编写标准Java应用程序
  6. 完全一次处理语义。
  7. 不需要单独的处理集群。
  8. 它是在Mac,Linux,Windows上开发的。

8. Kafka Streams用例

一个。纽约时报

为了将已发布的内容实时存储和分发到为读者提供的各种应用程序和系统,它使用Apache Kafka和Kafka Streams。

湾 Zalando

Zalando使用Kafka作为ESB(企业服务总线)作为欧洲领先的在线时尚零售商。这有助于他们从单一服务架构过渡到微服务架构。此外,使用Kafka处理事件流,他们的技术团队可以实现近乎实时的商业智能。

C。线

为了相互通信,LINE使用Apache Kafka作为其服务的中央数据中心。与Line一样,每天产生数千亿条消息,用于执行各种业务逻辑,威胁检测,搜索索引和数据分析。此外,Kafka帮助LINE可靠地转换和过滤主题,使消费者可以有效消费的子主题同时保持易于维护。

d。Pinterest的

为了为其广告基础设施的实时预测预算系统提供动力,Pinterest大规模使用Apache Kafka和Kafka Streams。Kafka Streams的支出预测比以往任何时候都更准确。
让我们来修改卡夫卡的特色

即 荷兰合作银行

Apache Kafka支持数字神经系统,Rabobank的商务活动巴士。它是荷兰三大银行之一。通过使用Kafka Streams,该服务可以实时向客户发出金融事件的警报。

9.结论

因此,我们已经详细了解了Apache Kafka Streams的概念。我们讨论了流处理和实时处理。此外,我们看到了Stream Processing Topology及其特殊处理器。之后,我们转向Kafka Stream架构并实施Kafka Streams。最后,我们研究了Kafka Streams的功能和用例

Kafka Streams | 流,实时处理和功能的更多相关文章

  1. Kafka Streams详细

    概述 1 Kafka Streams Kafka Streams.Apache Kafka开源项目的一个组成部分.是一个功能强大,易于使用的库.用于在Kafka上构建高可分布式.拓展性,容错的应用程序 ...

  2. 手把手教你写Kafka Streams程序

    本文从以下四个方面手把手教你写Kafka Streams程序: 一. 设置Maven项目 二. 编写第一个Streams应用程序:Pipe 三. 编写第二个Streams应用程序:Line Split ...

  3. [翻译]Kafka Streams简介: 让流处理变得更简单

    Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams.当时Ka ...

  4. Kafka Streams简介: 让流处理变得更简单

    Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams.当时Ka ...

  5. Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架

    根据最新的统计显示,仅在过去的两年中,当今世界上90%的数据都是在新产生的,每天创建2.5万亿字节的数据,并且随着新设备,传感器和技术的出现,数据增长速度可能会进一步加快. 从技术上讲,这意味着我们的 ...

  6. Confluent Platform 3.0支持使用Kafka Streams实现实时的数据处理(最新版已经是3.1了,支持kafka0.10了)

    来自 Confluent 的 Confluent Platform 3.0 消息系统支持使用 Kafka Streams 实现实时的数据处理,这家公司也是在背后支撑 Apache Kafka 消息框架 ...

  7. 浅谈kafka streams

    随着数据时代的到来,数据的实时计算也越来越被大家重视.实时计算的一个重要方向就是实时流计算,目前关于流计算的有很多成熟的技术实现方案,比如Storm.Spark Streaming.flink等.我今 ...

  8. Apache Kafka 0.11版本新功能简介

    Apache Kafka近日推出0.11版本.这是一个里程碑式的大版本,特别是Kafka从这个版本开始支持“exactly-once”语义(下称EOS, exactly-once semantics) ...

  9. 大全Kafka Streams

    本文将从以下三个方面全面介绍Kafka Streams 一. Kafka Streams 概念 二. Kafka Streams 使用 三. Kafka Streams WordCount   一. ...

随机推荐

  1. The 10th Shandong Provincial Collegiate Programming Contest 2019山东省赛游记+解题报告

    比赛结束了几天...这篇博客其实比完就想写了...但是想等补完可做题顺便po上题解... 5.10晚的动车到了济南,没带外套有点凉.酒店还不错. 5.11早上去报道,济南大学好大啊...感觉走了一个世 ...

  2. learning scala akka actorySystem create and close

    package com.example import akka.actor.ActorSystem import scala.util.{Failure, Success} import scala. ...

  3. WinDbg常用命令系列---显示当前异常处理程序链!exchain

    !exchain 这个!exchain扩展命令显示当前异常处理程序链. !exchain [Options] 参数: Options下列值之一: /c  如果检测到异常,则显示与调试C++ try/c ...

  4. facl

    file access control lists 文件的额外赋权机制,针对性的对某用户对文件的权限进行处理 setfacl 指定空权限

  5. PDO和MySQLi区别和数度;到底用哪个?

    当用PHP访问数据库时,除了PHP自带的数据库驱动,我们一般还有两种比较好的选择:PDO和MySQLi.在实际开发过程中要决定选择哪一种首先要对二者有一个比较全面的了解.本文就针对他们的不同点进行分析 ...

  6. 干货 | 10分钟搞懂branch and bound(分支定界)算法的代码实现附带java代码

    Outline 前言 Example-1 Example-2 运行说明 00 前言 前面一篇文章我们讲了branch and bound算法的相关概念.可能大家对精确算法实现的印象大概只有一个,调用求 ...

  7. webapp接口安全设计思路

    在做webqq或者说app开发的时候,免不了会有接口是有权限的(如查询用户敏感信息等),这时接口安全设计思路就非常重要了. 简单一点,在APP中保存登录数据,每次调用接口时传输 程序员总能给自己找到偷 ...

  8. Java 面向对象(九)

    常用类之Random Random类位于 java.util 包中,主要用于生成伪随机数 Random类将种子数作为随机算法的起源数字,计算生成伪随机数,其与生成的随机数字的区间无关 创建Random ...

  9. linux 命令 文件数量统计

    # 查看当前目录下的文件数量(不包含子目录中的文件) ls -l|grep "^-"| wc -l # 查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表子目录 ls ...

  10. java单元测试之如何实现异步接口的测试案例

    测试是软件发布的重要环节,单元测试在实际开发中是一种常用的测试方法,java单元测试主要用junit,最新是junit5,本人开发一般用junit4.因为单元测试能够在软件模块组合之前尽快发现问题,所 ...