0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Kafka架构技术:Kafka的架构和客户端API设计

小林coding 来源:小林coding 2023-10-10 15:41 次阅读

今天我们来聊一聊 Kafka 的架构。

大家一般熟悉的是三层结构:生产者、消费者、消息代理(Message Broker)。其实 Kafka 有更加详细的架构。

我们来一起看看。

Kafka 给自己的定位是事件流平台(event stream platform)。因此在消息队列中经常使用的 "消息"一词,在 Kafka 中被称为 "事件"。

下图详细展示了 Kafka 的架构和客户端 API 设计。我们可以看到,尽管生产者、消费者和消息代理仍然是架构的关键,但要构建一个高吞吐量、低时延的 Kafka,还需要更多的组件。让我们逐一介绍这些组件。

从高层次来看,架构分为两层

计算层

存储层

6f119bf0-666a-11ee-939d-92fbcf53809c.png

计算层

计算层允许各种应用程序通过 API 与 Kafka Broker 通信

生产者使用生产者 API。如果数据库等外部系统想与 Kafka 通信,它还提供 Kafka Connect 作为集成 API。

消费者通过消费者 API 与 Broker 通信。我们可以使用 Kafka Connect API 将事件数据路由到其他数据处理平台上,例如搜索引擎或数据库。

此外,消费者还可以使用 Kafka Streams API 进行流式处理。如果要处理无边界的数据流,我们可以创建一个 KStream。

下面的代码片段为主题 "订单 "创建了一个 KStream,并为 key 和 value 创建了 Serdes(Serializers and Deserializers,序列化和反序列化)。

如果我们只需要更新实体的最新状态,我们可以创建一个 KTable 来维护状态。

Kafka Streams 允许我们对事件流进行聚合、过滤、分组和连接。

finalKStreamBuilderbuilder=newKStreamBuilder();
finalKStreamorderEvents=
builder.stream(Serdes.String(),orderEventSerde,"orders");

虽然 Kafka Streams API 在 Java 应用程序中运行良好,但有时我们可能希望部署一个独立的流处理模块,而不将其嵌入到应用程序中。这时,我们可以使用 ksqlDB。这是一个针对流处理进行了优化的数据库集群。它还提供了 REST API,供我们查询结果。

我们可以看到,有了计算层中的各种 API 支持,我们可以非常灵活地对事件流进行链式操作。

例如,我们可以在消费者中订阅主题 "orders",按照产品维度进行订单聚合,然后将每个产品的订单数发回 Kafka 主题 "ordersByProduct";另一个分析模块可以订阅这个主题并在界面上显示这些订单。

存储层

这一层由 Kafka Broker 组成。Kafka Broker 以集群模式运行。数据存储在不同主题的分区中。

主题就像一个数据库表,主题中的分区可以分布在不同的集群节点上。在分区内,事件严格按照偏移量(offset)排序。偏移量代表事件在分区中的位置,并单调递增。

在 Broker 上持久化的事件是不可变的(immutable)、只可追加的(append only),即使是删除也被模拟为删除事件,而不是直接从磁盘上删除数据。因此,生产者只能处理顺序写入,消费者只能顺序读取。

Kafka Broker 的职责包括管理分区、处理读写操作以及管理分区的数据复制。它的设计非常简单,因此易于扩展

由于 Kafka Broker 是以集群模式部署的,因此有两个必要的组件来管理节点:控制面板和数据面板。

控制面板

控制平面管理 Kafka 集群的元数据。以前的版本中是由 Zookeeper 来管理控制器:挑选一个 Broker 作为控制器(Controller)。现在,Kafka 使用名为 KRaft 的共识模块来实现控制面板,选取几个 Broker 做为控制器。

为什么不再依赖 Zookeeper?因为使用 Zookeeper 时,我们需要维护两个不同类型的系统:一个是 Zookeeper,另一个是 Kafka。有了 KRaft,我们只需维护一种类型的系统,这使得配置和部署比以前容易得多。此外,KRaft 在向 Broker 传播元数据方面效率更高。

我们不会在这里讨论 KRaft 共识的细节。需要记住的一点是,控制器和 Broker 中的元数据缓存是通过 Kafka 中的一个特殊主题同步的。

数据面板

数据面板处理数据的复制操作。单个分区的数据可以在不同的 Broker 上有多份拷贝,这些拷贝之间需要进行数据同步。

下图是一个示例。主题 "订单"中的分区 0 在 3 个代理上有 3 个副本。Broker 1 上的分区是领导者(leader),当前数据偏移量为 4;Broker 2 和 3 上的分区是跟随者(follower),偏移量分别为 2 和 3。

6f1fd300-666a-11ee-939d-92fbcf53809c.png

第一步

为了赶上领导者,跟随者 1 发出偏移量为 2 的 FetchRequest,跟随者 2 发出偏移量为 3 的 FetchRequest。

第二步

然后,领导者相应地向两个跟随者发送数据。

第三步

由于跟随者的请求隐含地确认了先前获取记录的接收情况,因此领导者会将偏移量 2 之前的记录提交。

编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16177

    浏览量

    177312
  • JAVA
    +关注

    关注

    19

    文章

    2954

    浏览量

    104522
  • API
    API
    +关注

    关注

    2

    文章

    1483

    浏览量

    61790
  • 数据库
    +关注

    关注

    7

    文章

    3758

    浏览量

    64265
  • kafka
    +关注

    关注

    0

    文章

    50

    浏览量

    5209

原文标题:面试官:Kafka架构长什么样的?

文章出处:【微信号:小林coding,微信公众号:小林coding】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    kafka架构与集群搭建

    kafka入门+集群搭建
    发表于 04-29 17:06

    EFK63+kafka+logstash架构解读

    EFK63+kafka+logstash日志分析平台集群
    发表于 08-15 11:35

    基于发布与订阅的消息系统Kafka

    Kafka权威指南》——初识 Kafka
    发表于 03-05 13:46

    Kafka基础入门文档

    kafka系统入门教程(原理、配置、集群搭建、Java应用、Kafka-manager)
    发表于 03-12 07:22

    Kafka集群环境的搭建

    1、环境版本版本:kafka2.11,zookeeper3.4注意:这里zookeeper3.4也是基于集群模式部署。2、解压重命名tar -zxvf
    发表于 01-05 17:55

    TCP回响客户端:RAW API接口

    TCP回响客户端例程(RAW API)
    的头像 发表于 07-05 00:31 3905次阅读
    TCP回响<b class='flag-5'>客户端</b>:RAW <b class='flag-5'>API</b>接口

    架构师应该使用Kafka还是Rabbit MQ

    作为处理许多基于微服务的系统的软件架构师,我经常遇到一个不断重复的问题:"我应该使用RabbitMQ还是Kafka?" 由于某些原因,许多开发人员认为这些技术是可互换的。 尽管在某些情况下确实如此,但这些平台之间存在各种潜在的差
    的头像 发表于 05-03 18:10 2334次阅读
    <b class='flag-5'>架构</b>师应该使用<b class='flag-5'>Kafka</b>还是Rabbit MQ

    Kafka的概念及Kafka的宕机

    问题要从一次Kafka的宕机开始说起。 笔者所在的是一家金融科技公司,但公司内部并没有采用在金融支付领域更为流行的 RabbitMQ ,而是采用了设计之初就为日志处理而生的 Kafka ,所以我一直
    的头像 发表于 08-27 11:21 2050次阅读
    <b class='flag-5'>Kafka</b>的概念及<b class='flag-5'>Kafka</b>的宕机

    kafkaUI-lite Kafka UI界面客户端工具

    ./oschina_soft/gitee-kafka-ui-lite.zip
    发表于 06-14 11:07 6次下载
    kafkaUI-lite <b class='flag-5'>Kafka</b> UI界面<b class='flag-5'>客户端</b>工具

    基于RAW API的UDP客户端设计

    前一节我们实现了基于RAW API的UDP服务器,在接下来,我们进一步利用RAW API实现UDP客户端
    的头像 发表于 12-14 14:59 1206次阅读
    基于RAW <b class='flag-5'>API</b>的UDP<b class='flag-5'>客户端</b>设计

    想要kafka好用你就得知道这些工具

    工欲善其事,必先利其器。本文主要分享一下消息中间件kafka安装部署的过程,以及我平时在工作中针对kafka用的一些客户端工具和监控工具。
    的头像 发表于 05-22 16:33 1205次阅读
    想要<b class='flag-5'>kafka</b>好用你就得知道这些工具

    Kafka 的简介

      1 kafka简介 2 为什么要用消息系统 3 kafka基础知识 4 kafka集群架构 5 总结   1 kafka简介 其主要设计
    的头像 发表于 07-03 11:10 586次阅读
    <b class='flag-5'>Kafka</b> 的简介

    物通博联5G-kafka工业网关实现kafka协议对接到云平台

    Kafka协议是一种基于TCP层的网络协议,用于在分布式消息传递系统Apache Kafka中发送和接收消息。Kafka协议定义了客户端和服务器之间的通信方式和数据格式,允许
    的头像 发表于 07-11 10:44 481次阅读

    如何将Kafka使用到我们的后端设计中

    的Web应用,其包含了网页前端客户端(Client)、服务和数据库: 你需要记录所有发生在你的Web应用的事件,比如点击、请求、搜索等
    的头像 发表于 10-30 14:30 478次阅读
    如何将<b class='flag-5'>Kafka</b>使用到我们的后端设计中

    Redis流与Kafka相比如何?

    我们先来看看Kafka的基本架构。基本的数据结构是主题。它是一个按时间排序的记录序列,只需追加。使用这种数据结构的好处在Jay Kreps的经典博文The Log中得到了很好的描述。
    的头像 发表于 02-21 16:09 424次阅读
    Redis流与<b class='flag-5'>Kafka</b>相比如何?