当前位置: 首页 > news >正文

java面试:有了解过kafka架构吗,可以详细讲一讲吗

kafka是一个消息队列的常见架构,负责对消息的传递和管理,进而来保证服务的上下游具有一个相对较好的性能,因此在java的面试当中,kafka常常会最为一个考察要点来判断面试者对mq消息队列的熟悉程度,因此今天我们就对kafka消息队列进行分享和讲解,希望大家能从中学习到知识,能够有所收获。

1.kafka的整体架构

     与上一期讲解的mq设计的逻辑核心类似,kafak消息队列的构成的过程当中是包含发送信息数据的生产者,用于处理生产者信息和接受处理消费者拉取请求的borker,管理broker的ZK注册中心,以及获得数据的消费者,具体结构如下图所示:

2.kafka当中的topic

     从消息的角度来说,消息事实上是具有许多的类型的,为了方便消息的管理,所以broker通过topic来对消息进行分类,这样生产者就可以将不同类型的消息发送到对应的topic上,而消费者也可以通过订阅不同的topic来获取收集消息。

      

     同时我们也知道同一条消息是可以被多个消费者消费的,但是这么多不同的消费者,我们是需要记录这些消费的的消费进度的,所以在toopic当中的每条消息实则还做了partition的分区,而每一条信息被称之为offset,消费者只要在读取使用数据的过程中记录保存对应的offset接可以了。

broker中topic的分区

分区写入消费的逻辑

3.kafka的高可用

     假设一个topic的partition是整体的被存储在某一个机器上的,那这个机器的io就成为了这个topic的性能瓶颈,这样的效率和可用性会不太高,为了解决这种问题,topic下的partition被分为了多段,而每一段的partition只存储部分信息,而broker是集群,因此一个topic下的多个partition就可以被分散到不同的broker节点当中,这样我们单机存储的性能问题就被解决了。

     不过依旧会存在一定的问题,首先就是虽然说消息被分散了出去,但kafka就只能保证单个partition队列中的消息是有序的,而同一个topic下的partition切片的有序性就无法保证了。

     而其次就是,假设broker故障宕机了就会导致其所存储的部分partition数据就丢失了,这样的结果就是消息的完整性就相对较差了

     为了解决这个问题,kafka提供了一个多副本机制,每个parttition数据都会同步到其他的broker节点当中,而这些broker节点就相当与partition的副本,而这些节点回选取一个leader节点去和生产者和消费者进行交互,获取到请求后,kafka就会将数据同步给其他的所有副本,同时这个推选出来的leader节点,就会包含所有的读写操作,来方便管理用户的消费进度,而假设读取的是副节点的数据,offset就较为难管理了。

4.kafka的消费者组的概念

     为了能够及时的将数据消费掉,因此kafak增加了消费者组的概念,多个消费者组成消费者组,而这些消费者组就能够并行的对消息进行消费。

5.kafka的工作流程

     为了保证工作流程顺利进行,kafka需要保证生产者要发送信息到哪个broker中,而消费者需要从那个broker中获取信息,因此kafak当中的broker集群会定时的向zk注册中心发送心跳包,这样zk就掌管了所有broker的topic和partition的信息,而broker会选举一个管理者叫controller,controller会持续监听zk当中的数据,当发现zk的topic数据发生变化时,controller就会拉取最新的消息,广播给每个broker,因此broker本省就有所有的集群信息和路由表。

     生产者访问broker就能获取到路由信息,将消息发送给对应topic的partiton的leader的broker,而broker收到消息就会写到partiton的末尾,分配offset,然后同步数据构建partition副本。

     消费者通过访问borker就可以获得订阅信息和路由信息,就知道去哪个broker中去拉取信息了,然后通过offset去读取对应节点的消息。

今天的分享就到这里了,希望这篇博客能给你一些帮助,让你对关于kafka架构的问题得到进一步的提升,在面试的时候能从容面对面试官。

http://www.dtcms.com/a/558088.html

相关文章:

  • 专业国外网站建设手机自己做网站
  • 塑胶托盘东莞网站建设东莞市企业信息查询网
  • 语法--12-- as
  • 小迪安全v2023学习笔记(一百四十一讲)—— Linux系统权限提升篇VulnhubCapability能力LD_Preload加载数据库等
  • ROS2系列 (16) : Python服务通信实例——自定义消息接口
  • T型槽铸铁平台的特点
  • 数字马力前端开发面试题及参考答案(下)
  • 给网站做广告有什么好的网站做推广的
  • 潍坊网站建设官网装修网站开发前的准备工作
  • LLM之Agent(二十五)| 使用 A2A Agents和 MCP Server构建一个Demo Multi-Agent系统
  • 【30】船舶数据集(有v5/v8模型)/YOLO船舶检测
  • 全网视频合集网站建设制作相册图片合集
  • 网站建设建议书嘉兴手机网站建设
  • 公司网站建设 阜阳四川城乡建设网站证件查询
  • MySQL操作库
  • 免费vip影视网站怎么做的重庆网站建设与制作
  • React Hooks 实现表单验证
  • 李宏毅机器学习笔记38
  • 本网站建设优秀个人网站欣赏
  • 基于springboot的河南传统文化展示与推荐系统
  • 宁波专业网站建设公司百度网络营销的概念和含义
  • 《P2656 采蘑菇》
  • 做网站每年需付费吗河南省建设人才信息网官网
  • 做网站要用到数据库吗文网文网站建设
  • 网站策划流程专业做婚庆的网站
  • 中国住房建设部网站wordpress后台拿shell
  • day96—双指针—长按键入(LeetCode-925)
  • 本地部署 Spring AI 完全指南:从环境搭建到实战落地
  • 外贸服装网站建设高邮网站建设
  • 建设电子商务网站期末考试网站开发需求表