【Kafka】Kafka基础架构及相关概念

news2024/11/30 8:34:16

文章目录

    • 前言
    • 一、Kafka基础知识
    • 二、Kafka分区副本
    • 参考

前言

在以前的定义中,Kafka被定义为一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域,类似的产品主要有ActiveMQ、RabbitMQ、RocketMQ…,当然我们知道kafka的作用远不止用于消息队列,Kafka作为消息队列主要是基于点对点模式和基于发布订阅模式,其中,点对点模式表现为:消费者主动拉取数据,消息收到后清除消息。而发布订阅表现为:

  • 可以有多个topic主题(浏览、点赞、收藏、评论等)。
  • 消费者消费数据之后,不删除数据。
  • 每个消费者相互独立,都可以消费到数据。

消息队列的主要应用场景包括:缓存/消峰、解耦和异步通信
缓冲/消峰:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。
在这里插入图片描述

解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
在这里插入图片描述

异步通信:允许用户把一个消息放入队列,但并不立即处理它,然后在需要的时候再去处理它们。
在这里插入图片描述

下面就介绍下Kafka中基本的概念知识…

一、Kafka基础知识

我们先来看下Kfaka的基础架构:
在这里插入图片描述
从上图中我们可以看到,一个典型的Kafka体系架构包括若干Producer、若干Broker、若干Consumer以及一个ZooKeeper集群。其中ZooKeeper是Kafka用来负责集群元数据的管理、控制器的选举等操作的。Producer将消息发送到Broker,Broker负责将收到的消息存储到磁盘中,而Consumer负责从Broker订阅并消费消息。Kafka中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题,而消费者负责订阅主题并进行消费。

主题是一个逻辑上的概念,它还可以细分为多个分区,一个分区只属于单个主题。同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。offset是消息在分区中的唯一标识,Kafka通过它来保证消息在分区内的顺序性,不过offset并不跨越分区,也就是说,Kafka保证的是分区有序而不是主题有序。

注意:上图也只是Kafka的基础架构图,不一定能准确描Kafka各版本的改动信息,例如,在Kafka3.0+版本中,Kafka不再依赖于ZooKeeper管理元数据信息等。

Kafka分为服务器端和客户端。服务器端的元数据通常是指集群的元数据,包括集群有哪些Broker,有哪些主题,每个主题都有哪些分区,而每个分区的Leader副本在哪台Broker上等信息。这些信息保存在ZooKeeper和Controller中。Kafka以ZooKeeper中保存的元数据为权威数据,Controller会从ZooKeeper中获取最新的元数据并缓存在自己的内存中。客户端的元数据通常是指消费者的注册信息和位移信息。在Kafka 0.9版本之前,这些信息的确保存在ZooKeeper中。不过目前已经废弃了。新版本的消费者把这些信息保存在一个Kafka的内部主题中,由集群中一个名为Coordinator的组件进行管理。Kafka3.0以前(主要是指服务器端)是依赖ZooKeeper才能正常运转的。3.0后移除对ZooKeeper的依赖。具体的原理是在Kafka内部实现一个基于Raft的Controller集群,来替代ZooKeeper保存和管理集群元数据。

下面将解释Kafka中的各种基础概念:

  • Producer:消息生产者,就是向 Kafka Broker 发消息的客户
  • Consumer:消息消费者,向 Kafka Broker 取消息的客户端。
  • Consumer Group(CG):消费者组,由多个 Consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
  • Broker:一台 Kafka 服务器就是一个 Broker 。一个集群由多个 Broker 组成。一个Broker 可以容纳多个 Topic。
  • Topic:可以理解为一个队列,生产者和消费者面向的都是一个 Topic。
  • Partition:为了实现扩展性,一个非常大的 Topic可以分布到多个 Broker (即服务器)上,一个 Topic可以分为多个 Partition,每个 Partition是一个有序的队列。
  • Replica:副本。一个 Topic的每个分区都有若干个副本,一个 Leader 和若干个Follower。
  • Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 Leader。
  • Follower:每个分区多个副本中的“从”,实时从 Leader 中同步数据,保持和Leader 数据的同步。Leader 发生故障时,某个 Follower 会成为新的Leader。

二、Kafka分区副本

当Kafka生产者给Kafka集群(多个Broker组成Kafka集群)发送消息时,会根据分区规则选择存储到Broker中的哪个具体的分区。如果分区规则设定得合理,所有的消息都可以被均匀地分配到不同的分区中。

Kafka为分区引入了多副本机制,通过增加副本数量可以提升容灾能力。同一分区的不同副本中保存的是相同的消息,副本之间是一主多从的关系,其中Leader副本负责处理读写请求,Follower副本只负责与Leader副本的消息同步。副本处于不同的Broker中,当Leader副本出现故障时,从Follower副本中重新选举新的Leader副本对外提供服务。Kafka通过多副本机制实现了故障的自动转移,当Kafka集群中某个Broker失效时仍然能保证服务可用。

Consumer使用拉模式从服务端拉取消息,并且保存消费的具体位置,当消费者宕机后恢复上线时可以根据之前保存的消费位置重新拉取需要的消息进行消费,这样就不会造成消息丢失。

在Kafka中,分区中的所有副本统称为AR。所有与Leader副本保持一定程度同步的副本(包括Leader副本在内)组成ISR,ISR集合是AR集合中的一个子集。消息会先发送到Leader副本,然后Follower副本才能从Leader副本中拉取消息进行同步,同步期间内Follower副本相当于Leader副本而言会有一定程度的滞后。与Leader副本同步滞后过多的副本(不包括Leader副本)组成OSR,AR=ISR+OSR,在正常情况下,所有的Follower副本都应该与Leader副本保持一定程度的同步,即AR=ISR,OSR集合为空。

Leader副本负责维护和跟踪ISR集合中所有Follower副本的滞后状态,当Follower副本落后太多或失效时,Leader副本会把它从ISR集合中剔除。如果OSR集合中有Follower副本追上了Leader副本,那么Leader副本会把它从OSR集合转移至ISR集合。默认情况下,当Leader副本发生故障时,只有在ISR集合中的副本才有资格被选举为新的Leader,而在OSR集合中的副本则没有任何机会

HW(High Watermark):俗称高水位,它标识了一个特定的消息偏移量(offset),消费者只能拉取这个offset之前的消息

LEO(Log End Offset):它标识当前日志文件中下一条待写入消息的offset。

参考

1、Kafka基本概念、集群搭建、生产者与消费者
2、【尚硅谷】2022版Kafka3.x教程(从入门到调优,深入全面)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flutter useRootNavigator属性的作用

useRootNavigator 用于确定是否将对话框推到距给定上下文最远或最接近给定上下文的Navigator 问题: 在使用showDatePicker的时候,android手机如果侧滑返回的时候,页面会关闭,showDatePicker弹出的dailog缺没有关闭。 使用如下…

【学习笔记42】操作DOM

操作DOM一、操作DOM1、步骤2、创建元素节点3、创建文本节点4、增加dom(添加到指定父节点的最后)5、增加dom(添加到指定父节点的最后)6、增加dom(添加到父节点的最前边)7、删除DOM8、修改某一个节点二、克隆DOM1、说明2、复制(克隆)一个LI三、获取元素尺寸(占地面积)四、获取浏览…

WordPress怎么禁止用户使用HTML标签,自动过滤HTML代码?

WordPress怎么禁止用户使用HTML标签,自动过滤HTML代码?出于安全考虑WordPress默认禁止角色为作者的用户写文章时直接添加HTML代码,包括读者留言时也是不允许的。如果想开放此限制,允许作者撰写文章和读者留言时添加HTML代码&#…

Java项目——博客系统(前后端交互)

项目展示 项目说明 使用servlet,实现前后端交互,通过jdbc和mysql数据库进行数据传输,使得可以将用户信息和博客列表存储在数据库中,实现真正的服务器,客户端,数据库三者的交互 项目代码 数据库 在sql数…

进阶的风控策略篇:如果筛选最佳策略帮我们锁定优质客群

在番茄风控往期的内容中,我们一直在跟大家介绍风控策略干货内容,相关内容包括: ①风控的拒绝捞回策略 ②多规则的策略筛选 ③策略的调优 ④策略的开发与应用 … 策略相关的内容可谓干货满满,比如关于策略开发与应用的内容上&#…

SpringBoot SpringBoot 原理篇 1 自动配置 1.15 自动配置原理【1】

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.15 自动配置原理【1】1.15.1 看源码了1.15.2 Import({AutoConfig…

初识图学习

初识图学习 一、简单图的基础 什么是图 七桥问题的定义是:一个步行者怎样才能不重复,不遗漏的一次走完七座桥。最后回到出发点。 当年,大数学家在解答七桥问题的同时,也开创了数学的一个新分支图论。 可以毫不夸张的说&#xff…

半小时制作简单版澳大利亚导游地图,太简单了,你也可以

目录 1 前言 2 QQ扫码注册一个账号 3 编辑景区 3.1 新建一个景区 3.2 增加景点 4 预览 5 申请管理员审核 6 看一下发布后的效果 1 前言 不少景区为了提升游客旅游体验,需要制作自己的导游地图,游客扫一下二维码就可以看到景区全貌和景点介绍。制作这…

销售词汇Sell In、Sell Through、Sell Out辨析

原文出处:https://zhuanlan.zhihu.com/p/89563704 销售的过程其实是一个货物和资金双向流动的过程,货物从厂家流向消费者,资金从消费者流向厂家。 但是大多数情况下,厂家是没办法直接把货物卖给消费者的,或者说厂家是没…

虚拟机安装openEuler/MobaXterm工具登录系统

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…

一个用C#开发的操作系统的开源项目

自从C#的AOT编译机制发布以来,有趣的项目越来越多,今天给大家推荐一个开源项目,用C#开发的64位操作系统。 文章目录项目简介项目源码开发环境虚拟机与裸机硬件支持功能列表完善的编译、安装文档操作系统界面项目地址项目简介 这是一个使用.N…

SpringBoot SpringBoot 原理篇 2 自定义starter 2.2 IP计数业务功能开发【自定义starter】

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇2 自定义starter2.2 IP计数业务功能开发【自定义starter】2.2.1 大概看看别人…

阿里云服务器安装mysql8

1. 安装前准备 查看是否安装: rpm -qa | grep mysql移除不想要的版本: yum remove 名称查找关于mysql的所有文件(配置文件) find / -name mysql ##或者 whereis mysql删除配置文件 rm -rf 文件最后需要注意的是:卸载后…

配置iSCSI实现Linux的远程块存储

文章目录一 名词解释二 需求三 环境准备四 搭建流程1 服务端准备硬盘并分区2 服务端安装软件包,并启动服务3 服务端 5个create 操作3-1 定义块设备,创建后备存储。3-2 为目标创建IQN3-3 创建一个ACL来控制特定的客户端访问3-4 为每个后备存储创建一个LUN…

基于C#的校园闲置物品共享系统的开发和实现(Asp.net+Web)

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1选题背景 1 1.1.1校园闲置物品共享系统的开发背景 1 1.1.2学生闲置物品交易活动的现状 1 1.2 校园闲置物品共享系统的研究方向和内容 1 1.2.1研究方向 1 1.2.2研究内容 2 1.3 校园闲置物品共享系统的设计目标 2 1.4 校园闲置物品共…

Visual Studio Code(vs code) 安装c# .net环境 solution

Visual Studio Code(vs code) 安装c# .net环境 solution 一、安装.net必要环境 1.安装环境 https://dotnet.microsoft.com/zh-cn/download 我这里选择的是 .net 6.0 ;版本 .net SDK x86 2.在vs code拓展 搜索.net 全名:.NET Core Extension Pack 作者&#xf…

操作系统的发展与分类

文章目录世界上第一台通用电子计算机操作系统的发展阶段1. 手工操作阶段(无操作系统的计算机系统)2. 批处理阶段:同时处理多道程序3. 分时操作系统(Time Sharing System)4. 实时操作系统(Real Time System&…

毫米波传感器原理介绍:测距

因为本篇是第一篇关于毫米波雷达传感器设备的介绍,我便多啰嗦两句。近几年随着无人驾驶等领域在国内的火热,做支撑实现无人驾驶的智能设备也多了起了,首当其冲的便是无人驾驶的眼睛“摄像头”,同样作为一种辅助手段的雷达技术也被…

HTMLDOM中的API之btoa和atob

btoa() btoa() 方法可以将一个二进制字符串(例如,将字符串中的每一个字节都视为一个二进制数据字节)编码为 Base64 编码的 ASCII 字符串。 示例: let encodedData window.btoa("Hello, world"); // 编码 let decode…

【C++笔试强训计划】第一天

遇事不决,可问春风,春风不语,即随本心 欢迎来到我的笔试强训计划专栏,这是计划正式开始的第一天。另外,我想说的是:博主本身水平有限,本专栏只作为学习笔记分享记录使用,对于一些题目…