首页 > 其他分享 >初识kafka,先了解这些就够了

初识kafka,先了解这些就够了

时间:2023-08-23 16:33:02浏览次数:50  
标签:副本 HW 就够 Kafka 快递 初识 消息 kafka Leader

一、了解Kafka中的相关概念

MQ作为消息中间件,对于我们来说,已经并不陌生了,那么,由于Kafka它在众多的MQ间是非常火热的,那么必然也是我们需要着重关注的中间件之一了,为了更加清晰的了解Kafka,我们先从Kafka的体系结构入手,看看大体上都包含哪些东西。具体请见下图所示:

image.png

其中有一些我们很熟悉的,比如:Producer、Consumer;当然,也有一些陌生的概念,例如:Broker,下面我们就一一说明一下:

Producer】消费者,即:向Kafka中发送消息的消息生产端;<br> 【Consumer】消费者,即:从Kafka中获取消息的消息消费端,此处有一点大家需要注意,消费端是采用拉取数据的方式来获得消息的;<br> 【Kafka Broker】我们可以将其当做一个Kafka服务实例,或者按照常见的部署方式,即:一台Kafka服务器安装一个Kafka Broker;<br> 【ZooKeeper集群】此处作为存储和管理kafka集群元数据,或者辅助Controller选举操作等。

此处需要说明的一点就是,Kafka是希望将原有ZooKeeper负责的内容纳入自己的管辖区域,所以,在Kafka在2.8.0版本的时候,就已经引入了KRaft,而在3.3.1版本是,KRaft就已经可以成为一个真正产品来代替zk;不过因为目前线上很多使用的Kafka集群依然是配合着ZooKeeper集群来使用,所以在上图中,我们依然画出了ZooKeeper集群。

image.png

二、Topic主题

试想一下,当我们要尝试发送/消费消息的时候需要注意什么呢?**这有啥需要注意的,发送不就得了!**结果,我们发现了一个非常重大的问题,大家都往Kafka中发送消息,所有的消息都混合在了一起,就类似所有快递公司的快递员(Producer端)把快递都扔到了一个大仓库里,结果,去取快递的小伙伴们(Consumer端)面对堆积如山且混乱不堪的“快递山”——疯了。。。

image.png

那怎么办呢?这个好办,我们将原来的这个大屋子按照不同快递公司进行分割。这样,你是哪个快递公司的快递,就把快递放到对应的屋子里就可以了。那么,这个在Kafka中就叫做Topic,也就是我们常说的主题,不过在Kafka中,Topic主题只是一个逻辑概念,并“不是真实”存在的。此时有的同学就该不耐烦了——“不存在?!那你在这儿跟我叨叨半天……”不要着急,要想更进一步了解,我们还需要再了解一个概念,Partition分区

image.png

三、Partition分区

什么是Partition呢?我们还是以刚才的大仓库为例,随着国民收入的愈发增加以及网上购物的兴起,大家网上购买商品的比重大大超过了线下实体店的购买量,那么随着而来的就是快递包裹也成指数增长,为了解决这个问题,怎么办呢?答案貌似很简单,再建造几个仓库不就可以了。对的,就是这样的,这就是我们所说的Partition分区。

image.png

从上面再建造多个仓库的方式,除了可以平摊请求量并提升处理速度之外,我们再考虑一个问题,如果你要给另一个人写封信,这封信非常非常的重要,你怕对法收不到信,怎么办?我们可以将这封信复制成多份,然后发出去,即使信邮寄丢了,没关系,我们还有其他“副本”呢!这其实就是我们Partition的另外一个作用,尽量提高消息的容灾能力

那么,我们了解了以上概念之后,我们就将视野放到Kafka身上,在Kafka中为Partition引入了副本Replica)的概念,它采取的是“一主多从”的配置关系,即:主和从存储的数据都是相同的。那么,为了更加提升容灾能力,不同的副本会保存到不同的Kafka Broker节点上,这样,即使某个Broker宕机掉了,在其他Broker上依然保持着可服务的副本。

image.png

既然副本分为主副本和从副本,那么他们的职责如下所示:

主副本/Leader副本】负责处理集群的读写请求操作。<br> 【从副本/Follower副本】只负责同Leader副本的数据同步。

四、ISR&LEO&HW

上面我们介绍完了副本,我们来顺便了解一下五个关键缩写词:

AR(Assigned Replicas)】分区中的所有副本。<br> 【ISR(In-Sync Replicase)】所有与leader副本保持正常程度同步的副本(包括leader副本在内)的集合。<br> 【OSR(Out-of-Sync Replicase)】与leader副本同步滞后过多的副本(不包括leader副本)的集合。<br> 【LEO(Log End Offset)】它标识当前日志文件中下一条待写入消息的offset。<br> 【HW(High Watermark)】高水位,它标识了一个特定的消息偏移量(offset),消费者只能拉取到这个offset之前的消息。

从上面对于5个缩写词的介绍,大家可以猜到 AR = ISR + OSR,而如果原有的Leader副本挂掉了,需要选主,则只会从ISR列表中进行选择,而不会去OSR中选择。

而对于LEOHW,我们看下图所示:

image.png

LEO所指向的位置,就是新来消息所待插入的位置;而对于HW来说,取partition中对应的ISR最小的LEO(log-end-offset)作为HW;Consumer最多只能消费到HW所在的位置,每个副本都有HWLeaderFollower各自负责更新自己的HW的状态。

对于Leader新写入的消息,Consumer不能立刻消费,Leader会等待该消息被所有ISR中的副本同步后更新HW,此时消息才能被Consumer所消费。这样就能保证如果Leader所在的broker失效,该消息仍然可以从新选举的Leader中获取。具体逻辑如下图所示:

image.png

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

标签:副本,HW,就够,Kafka,快递,初识,消息,kafka,Leader
From: https://blog.51cto.com/u_15003301/7204359

相关文章

  • Kafka 基础命令
    Kafka部署路径说明#程序部署路径: /opt/kafka#配置文件路径: /opt/kafka/config#启动脚本目录 /opt/kafka/bin#数据持久化目录 /opt/kafka/kafka-logs Kafka启停命令说明#切换路径至:cd/opt/kafka/bin#前台启动命令shkafka-server-start.shconfig/server.p......
  • 【8月摸鱼计划】初识CSRF
    CSRF(Cross-siterequestforgery)跨站请求伪造,也被称为"OneClickAttack"或者SessionRiding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。与XSS攻......
  • Zookeeper对于Kafka的作用和意义
    Zookeeper在ApacheKafka中扮演着关键的角色,它提供了分布式协调和配置管理服务,对于Kafka集群的正常运行和高可用性至关重要。以下是具体介绍。配置管理Zookeeper负责存储和管理Kafka集群的配置信息,包括主题(topics)和分区(partitions)的分配、副本(replicas)的分布、消费者组(consumergro......
  • IP地址是唯一的吗?是可以改变的吗?(IP地址初识的几个关键点)
    IP地址初识目录IP地址的简单背景知识IP地址是唯一的吗IP地址可以改变吗如何查询本机内网IP地址和对应外网公共IP地址内容1.IP地址的简单背景知识IP地址(InternentProtocolAddress)是IP(InternetProtocol,中文名称“网际互连协议”,简称“网际协议”)提供的......
  • 初识计算机
    今日内容概要Typora软件的使用编程与编程语言计算机基础计算机的五大组成部分计算机的三大核心硬件操作系统今日内容详细Typora软件的使用它不是国产软件的,它是国外的,官方网站是国外,在国内下载国外的软件,就会出现下载速度慢的问题#1.下载:https://typoraio.cn/这......
  • 原来你是这样的SpringBoot--初识SpringBootAdmin
    简介SpringBootAdmin(SBA)是一个针对spring-boot的actuator接口进行UI美化封装的监控工具。它可以:在列表中浏览所有被监控spring-boot项目的基本信息,详细的Health信息、内存信息、JVM信息、垃圾回收信息,还可以直接修改logger日志的level。SBA分为server端和client端,下面来看一个......
  • springboot~kafka中延时消息的实现
    应用场景用户下单5分钟后,给他发短信用户下单30分钟后,如果用户不付款就自动取消订单kafka无死信队列kafka本身没有这种延时队列的机制,像rabbitmq有自己的死信队列,当一些消息在一定时间不消费时会发到死信队列,由死信队列来处理它们,上面的两个需求如果是rabbitmq可以通过死信......
  • kafka相关命令
    删除topic:/bin/kafka-topics--delete--topictest--bootstrap-serverlocalhost:9092 新增topic:/bin/kafka-topics--create--topictest--bootstrap-serverlocalhost:9092查询组:/bin/kafka-consumer-groups.sh--bootstrap-server127.0.0.1:9092--describe--group......
  • 【2.0】Linux初识
    【一】虚拟环境搭建详解虚拟环境搭建是一种在计算机上创建和模拟多个独立操作系统实例的技术,从而使得一个物理计算机能够同时运行多个虚拟的操作系统环境。这种技术可以提供更好的资源利用、隔离性、灵活性和可移植性。【1】KVM(Kernel-basedVirtualMachine)KVM是一个基于......
  • Kafka入门到精通技术文章
    Kafka入门到精通技术文章以下是一些从入门到精通Kafka的技术文章推荐:1.Kafka入门教程-这是一篇适合初学者的Kafka入门教程,介绍了Kafka的基本概念和架构,以及如何使用Kafka进行消息传输和处理。2.Kafka架构详解-这篇文章深入介绍了Kafka的架构,包括Kafka的主题(topics)、分区(p......