Kafka源码解析之SocketServer,kafka消息队列面试题

这篇具有很好参考价值的文章主要介绍了Kafka源码解析之SocketServer,kafka消息队列面试题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

=======================================================================

Kafka处理请求不区分优先级,但这种绝对公平的策略有时会发生问题。

比如:创建一个单分区双副本的主题,当时集群中的Broker A机器保存了分区的Leader副本,Broker B保存了Follower副本。突然业务激增,Broker A瞬间积压大量未处理PRODUCE请求。运维“不凑巧”执行了次Preferred Leader选举,将Broker B显式地调整成了Leader。

若Producer把acks设为all,那在LeaderAndIsr请求(负责调整副本角色,比如Follower和Leader角色转换)之前积压的那些PRODUCE请求就无法正常完成,因为这些请求要一直等待ISR中所有Follower副本同步完成。

但此时,Broker B成为了Leader,它上面的副本停止了拉取消息,这就可能出现一种结果:这些未完成的PRODUCE请求会一直保存在Broker A上的Purgatory缓存中。Leader/Follower的角色转换,导致无法完成副本间同步,所以这些请求无法被成功处理,最终Broker A抛出超时异常,返回给Producer程序。

Purgatory缓存是Broker端暂存延时请求的地方。

这就是因为对请求不区分优先级。

1 基本概念

=====================================================================

1.1 Data plane & Control plane


Data plane和Control plane的字面意思是数据面和控制面,各自对应数据类请求和控制类请求。

Kafka请求类型分为:

  • 数据类请求

Data plane负责处理数据类请求

  • 控制类请求

Control plane负责处理控制类请求

Controller与Broker交互的请求类型有如下种类:

  • LeaderAndIsrRequest

  • StopReplicaRequest

  • UpdateMetadataRequest

都属控制类请求,通常应该被赋予高优先级,比如PRODUCE和FETCH请求。

SocketServer负责对这两大类请求区分处理。

1.2 监听器(Listener)


区分数据类请求和控制类请求不同处理方式的主要途径。即创建多组监听器分别执行数据类和控制类请求的处理。

  • Kafka Broker端如下参数用以配置监听器

Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式

监听器定义为

EndPoint类


Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式

属性

  • host

Broker主机名。

  • port

Broker端口号。

  • listenerName

监听器名称。目前预定义的名称包括

  • PLAINTEXT

  • SSL

  • SASL_PLAINTEXT

  • SASL_SSL

Kafka允许自定义其他监听器名称,比如CONTROLLER、INTERNAL。

  • securityProtocol:监听器使用的安全协议。Kafka支持4种安全协议

  • PLAINTEXT

  • SSL

  • SASL_PLAINTEXT

  • SASL_SSL

Broker端参数

Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式

比如若Broker端参数配置如下:

Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式

配置3个监听器,分别是CONTROLLER、INTERNAL和EXTERNAL,使用的安全协议分别是PLAINTEXT、PLAINTEXT和SSL。

那SocketServer如何实现Data plane与Control plane分离的呢?

SocketServer

===========================================================================

属性


  • 实现请求优先级相关的字段

Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式

对于Data plane,线程池的说法没有问题,因为Processor线程确实有很多,而Acceptor也可能多个,因为SocketServer会为每个EndPoint(每套监听器)创建一个对应的Acceptor线程。

但Control plane不同。

Control plane那组属性变量都是以Opt结尾的,即Option类型,完全可以不使用Control plane,即你可让Kafka不区分请求类型,2.2.0之前设计就是这样。

但一旦开启Control plane设置,其Processor线程和Acceptor线程都是1个。

它对应的RequestChannel里面的请求队列长度被硬编码成20,即控制类请求的数量应该远小于数据类请求,因而不需要为它创建线程池和较深的请求队列。

创建Data plane所需资源

===============================================================================

  • 负责为Data plane创建所需资源

Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式

  • 执行流程

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式
Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式
Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式
Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式
Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式
Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式

最后

既已说到spring cloud alibaba,那对于整个微服务架构,如果想要进一步地向上提升自己,到底应该掌握哪些核心技能呢?

就个人而言,对于整个微服务架构,像RPC、Dubbo、Spring Boot、Spring Cloud Alibaba、Docker、kubernetes、Spring Cloud Netflix、Service Mesh等这些都是最最核心的知识,架构师必经之路!下图,是自绘的微服务架构路线体系大纲,如果有还不知道自己该掌握些啥技术的朋友,可根据小编手绘的大纲进行一个参考。

Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式

如果觉得图片不够清晰,也可来找小编分享原件的xmind文档!

且除此份微服务体系大纲外,我也有整理与其每个专题核心知识点对应的最强学习笔记:

  • 出神入化——SpringCloudAlibaba.pdf

  • SpringCloud微服务架构笔记(一).pdf

  • SpringCloud微服务架构笔记(二).pdf

  • SpringCloud微服务架构笔记(三).pdf

  • SpringCloud微服务架构笔记(四).pdf

  • Dubbo框架RPC实现原理.pdf

  • Dubbo最新全面深度解读.pdf

  • Spring Boot学习教程.pdf

  • SpringBoo核心宝典.pdf

  • 第一本Docker书-完整版.pdf

  • 使用SpringCloud和Docker实战微服务.pdf

  • K8S(kubernetes)学习指南.pdf

Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式

另外,如果不知道从何下手开始学习呢,小编这边也有对每个微服务的核心知识点手绘了其对应的知识架构体系大纲,不过全是导出的xmind文件,全部的源文件也都在此!

Kafka源码解析之SocketServer,kafka消息队列面试题,2024年程序员学习,kafka,分布式

宝典.pdf

  • 第一本Docker书-完整版.pdf

  • 使用SpringCloud和Docker实战微服务.pdf

  • K8S(kubernetes)学习指南.pdf

[外链图片转存中…(img-CP9XbQli-1712095401168)]

另外,如果不知道从何下手开始学习呢,小编这边也有对每个微服务的核心知识点手绘了其对应的知识架构体系大纲,不过全是导出的xmind文件,全部的源文件也都在此!

[外链图片转存中…(img-bYCraRMs-1712095401169)]文章来源地址https://www.toymoban.com/news/detail-844720.html

到了这里,关于Kafka源码解析之SocketServer,kafka消息队列面试题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 32个Java面试必考点-09(上)消息队列Kafka架构与原理

    本课时主要讲解消息队列与数据库相关的知识,重点讲解三部分知识点: 1.Kafka 的架构与消息交互流程; 2.数据库事务的 4 大特性和分类; 3.MySQL 相关的内容,比如索引、MySQL 调优等。 消息队列与数据库知识点 先来看看相关知识点汇总,如下图。首先为了防止歧义进行说明

    2024年02月20日
    浏览(40)
  • 【Kafka】消息队列Kafka基础

      消息队列,经常缩写为MQ。从字面上来理解,消息队列是一种用来存储消息的队列。例如Java中的队列:   上述代码,创建了一个队列,先往队列中添加了一个消息,然后又从队列中取出了一个消息。这说明了队列是可以用来存取消息的。我们可以简单理解消息队列就是

    2024年02月16日
    浏览(50)
  • 【Kafka】消息队列Kafka进阶

    生产者分区写入策略 生产者写入消息到 topic,Kafka 将依据不同的策略将数据分配到不同的分区中。 轮询分区策略 随机分区策略 按key分区分配策略 自定义分区策略 轮询策略   默认的策略,也是使用最多的策略,可以最大限度保证所有消息平均分配到一个分区。如果在生产

    2024年02月15日
    浏览(42)
  • 分布式 - 消息队列Kafka:Kafka生产者发送消息的方式

    不管是把Kafka作为消息队列、消息总线还是数据存储平台,总是需要一个可以往Kafka写入数据的生产者、一个可以从Kafka读取数据的消费者,或者一个兼具两种角色的应用程序。 Kafka 生产者是指使用 Apache Kafka 消息系统的应用程序,它们负责将消息发送到 Kafka 集群中的一个或多

    2024年02月13日
    浏览(44)
  • 分布式 - 消息队列Kafka:Kafka 消费者消息消费与参数配置

    01. 创建消费者 在读取消息之前,需要先创建一个KafkaConsumer对象。创建KafkaConsumer对象与创建KafkaProducer对象非常相似——把想要传给消费者的属性放在Properties对象里。 为简单起见,这里只提供4个必要的属性:bootstrap.servers、key.deserializer 和 value.deserializer。 ① bootstrap.servers 指

    2024年02月12日
    浏览(45)
  • 分布式 - 消息队列Kafka:Kafka生产者发送消息的分区策略

    01. Kafka 分区的作用 分区的作用就是提供负载均衡的能力,或者说对数据进行分区的主要原因,就是为了实现系统的高伸缩性。不同的分区能够被放置到不同节点的机器上,而数据的读写操作也都是针对分区这个粒度而进行的,这样每个节点的机器都能独立地执行各自分区的

    2024年02月13日
    浏览(54)
  • 消息队列——kafka基础

    首先自然是要列出Kafka官网地址啦:https://kafka.apache.org/ 概述 定义 发布/订阅模式 ​ 原文链接:https://blog.csdn.net/tjvictor/article/details/5223309 ​ 定义了一种 一对多 的依赖关系,让 多个订阅者对象同时监听某一个主题对象 。这个主题对象在自身状态变化时,会通知所有订阅者对

    2024年02月04日
    浏览(42)
  • 消息队列 Kafka

    Kafka 是一个分布式的基于发布/订阅模式的消息队列(MQ,Message Queue),主要应用于大数据实时处理领域 在高并发环境下,同步请求来不及处理会发生堵塞,从而触发too many connection错误,引发雪崩效应。比如大量的请求并发访问数据库,导致行锁表锁,最后请求线程会堆积过

    2024年02月07日
    浏览(39)
  • 消息队列之王——Kafka

        在学习kafka之前,我们需要先学习 Zookeeper ,那Zookeeper是什么呢? Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。         Zookeeper从 设计模式 角度来理解:是一个基于观察者模式设计的 分布式服务管理框架 ,它 负责存储和管理 大家都关心

    2024年01月23日
    浏览(48)
  • 分布式 - 消息队列Kafka:Kafka生产者发送消息的3种方式

    不管是把Kafka作为消息队列、消息总线还是数据存储平台,总是需要一个可以往Kafka写入数据的生产者、一个可以从Kafka读取数据的消费者,或者一个兼具两种角色的应用程序。 Kafka 生产者是指使用 Apache Kafka 消息系统的应用程序,它们负责将消息发送到 Kafka 集群中的一个或多

    2024年02月13日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包