Kafka之基本概念
1、Kafka是什么?
Kafka是由Scala语言开发的一个多分区、多副本,基于Zookeeper集群协调的系统。
那这个所谓的系统又是什么系统呢?
回答这个问题要从发展的角度来看:起初Kafka的定位是分布式消息系统。但是目前它的定位是一个分布式流式处理平台,用于实时数据集成和流数据处理。
2、Kafka都可以扮演哪些“角色”?
基于Kafka的发展和特性,它可以在我们的实际工作当中扮演以下几个“角色”:
- 消息系统
- 存储系统:将消息持久化到磁盘上。
- 流式处理平台:可以集成多种流式处理框架(例如:SparkStream、Flink等),不但可以作为可靠的数据源,同时提供了一套完整的流处理类库,例如:窗口、连接、交换和聚合等操作。
3、Kafka的体系架构?
Kafka体系架构包括:生产者(Producer)、消费者(Consumer)、服务代理节点(Broker)、一个Zookeeper集群。
-
生产者(Producer)
作为消息的发送方。负责创建消息,并将消息发送给Broker。
-
消费者(Consumer)
作为消息的接收方。负责连接Kafka并接收消息,进而进行相应的逻辑处理。
-
代理服务节点(Broker)
可以看做一个Kafka实例,多个Broker组成一个Kafka集群。
-
Zookeeper集群
Zookeeper用来负责Kafka集群的元数据管理和控制器的选举等操作。
让我们进一步来描述Producer、Consumer、Broker之间的关系以及作用:
Producer创建消息并将消息发送给Borker,Broker将接收到的消息存储到本地的磁盘上,Consumer负责在Broker上订阅并消费消息。
4、主题、分区、副本
Kafka中有三个重要的概念,主题、分区和副本。它们之间的关系如下图:

通过上图我们可以得知:
1个主题对应多个分区;一个分区对应多个副本;副本又分为一个leader副本和多个follower副本。
4.1、主题
- 主题是一个逻辑概念,我们可以把它当做消息的分类。
- Producer发送消息的时候会指明该消息所属的主题(即可以理解为Producer是将消息发送给了主题),一个消息只属于一个主题。
4.2、分区
- 一个主题下会细分为多个分区,每个分区对应一个主题。
- 消息在分区中的以offset(偏移量)作为唯一标识。
- Kafka通过offset来保证消息在分区中的顺序。
- offset不能跨区,所以我们说分区是有序的,而主题是无序。
- 分区可以分布在不同的broker上。
4.3、副本
-
一个分区会有多个副本,副本中的消息都是一致的(同一时刻可能会有不一致的情况)。
-
副本之间的关系是“一主多从”,即一个leader副本和多个follower副本。
- leader副本:负责消息的读写。
- follower副本:负责同步leader副本。
-
副本被分布到不同的broker上,leader副本挂掉了,会从follower副本中重新选举出一个新的leader副本。
-
我们将分区中所有副本统称为AR(Assigned Replicas)。其中一些与leader副本保持一定程度同步的副本(包括leader副本本身)统称为ISR(In-Sync Replicas)。而另外一些相较于leader副本滞后很多的副本统称为OSR(Out-of-Sync Replicas)。
由此可见,AR = ISR + OSR。正常情况下,所有follower副本都要与leader版本保持一定程度的同步,即AR = ISR,而OSR集合为空。
-
默认情况下,leader副本只能从ISR中的副本中选举出来。但是我们可以通过参数配置使得OSR中的副本也有机会被选举为leader副本。
-
leader副本还负责所有follower副本滞后状态的维护和跟踪,即当follower副本滞后较多的时候会将它从ISR中移动到OSR中,也会将OSR中追上leader副本的follower副本移动到ISR中。
-
特定偏移量HW和LEO。
- 针对分区有一个概念为高水位(High Watermark,缩写HW),它是一个特定的消息偏移量(offset),消费者只能接收到offset之前的消息
- ISR中的每个follower副本都维护一个自己的LEO(Log End Offset),它也是一个特定的消息偏移量(offset),即待写入消息的偏移量。

- HW与LEO之间的关系,如下图:

通过上图我们可以得知:分区的HW是通过ISR中最小的LEO得出的。
4.4、如何避免Consumer宕机重启后的消息丢失?
Consumer是通过拉(Pull)模式从服务端拉取消息的,同时会在Consumer端记录下消费的具体位置,当Consumer宕机重启后会根据之前记录的消费位置重新拉取需要的信息进行消费。
下一篇:Kafka之生产者
相关文章:
Kafka之基本概念
1、Kafka是什么? Kafka是由Scala语言开发的一个多分区、多副本,基于Zookeeper集群协调的系统。 那这个所谓的系统又是什么系统呢? 回答这个问题要从发展的角度来看:起初Kafka的定位是分布式消息系统。但是目前它的定位是一个分布…...
倪师学习笔记-天纪-斗数简介
一、学习过程 学习->验证->思考 二、算命方法 算命方法特点铁板神数适合核对六亲子平法准确度一般紫微斗数天文地理融合最好,批六亲不准,配合相可以提升准确率 三、果 天地人三者一起影响果,天时地利人和促成成功1/31/31/31算命部…...
Python酷库之旅-第三方库Pandas(143)
目录 一、用法精讲 646、pandas.Timestamp.is_quarter_start属性 646-1、语法 646-2、参数 646-3、功能 646-4、返回值 646-5、说明 646-6、用法 646-6-1、数据准备 646-6-2、代码示例 646-6-3、结果输出 647、pandas.Timestamp.is_year_end属性 647-1、语法 647…...
细说QT各种线程锁的特点和用法
文章目录 QMutex特点用法QReadWriteLock特点用法QSemaphore特点用法QWaitCondition特点用法在Qt框架中,提供了多种线程同步机制,包括互斥锁(Mutex)、读写锁(Read-Write Lock)、信号量(Semaphore)和条件变量(Wait Conditions)。这些机制用于处理多线程编程中的数据一致性和线程…...
Caffeine+Redis两级缓存架构
CaffeineRedis两级缓存架构 在高性能的服务项目中,我们一般会将一些热点数据存储到 Redis这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时,也能降低数据库的压力。 但是在一些场景下单纯使用 Redis 的分布…...
kafka和zookeeper单机部署
安装kafka需要jdk和zookeeper环境,因此先部署单机zk的测试环境。 zookeeper离线安装 下载地址: zookeeper下载地址:Index of /dist/zookeeper 这里下载安装 zookeeper-3.4.6.tar.gz 版本,测试环境单机部署 上传服务器后解压缩 …...
别了,公有云!下云迁移真的是大趋势么?
【科技明说 | 科技热点关注】 不知道你们还有没有印象,早在2022年,IBM发布了《IBM 企业转型指数:云现状》中也反映了这一趋势:80%的企业已经考虑或正在考虑将已经部署到公有云上的工作负载迁回私有的基础设施。 然而&…...
网关在不同行业自动化生产线的应用
网关在不同行业自动化生产线的应用,展示了其作为信息与物理世界交汇点的广泛影响力,尤其在推动行业智能化、自动化方面发挥了不可估量的作用。以下是网关技术在污水处理、智慧农业、智慧工厂、电力改造及自动化控制等领域的深入应用剖析。 1. 污水处理 …...
C++ socket编程(1)
这里是一个socket编程Demo,不考虑出错情况,代码简单,便于了解socket流程。 Demo分为服务器程序和客户端程序,运行需要先启动服务器程序,再启动客户端程序。 服务器会等待连接,客户端连接后,服…...
C# 文件夹类的实现与文件属性处理
在现代软件开发中,处理文件和文件夹是非常常见的任务。 C# 提供了丰富的类库来操作这些文件系统的基本元素。本篇文章将探讨如何在 C# 中实现一个简单的文件夹类,以及如何获取文件名、文件路径、大小和创建日期等文件属性。 一、使用 System.IO 命…...
基于SSM框架和Layui的学院课程安排系统的设计与实现(源码+定制+定制)
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...
【论文笔记】DKTNet: Dual-Key Transformer Network for small object detection
【引用格式】:Xu S, Gu J, Hua Y, et al. Dktnet: dual-key transformer network for small object detection[J]. Neurocomputing, 2023, 525: 29-41. 【网址】:https://cczuyiliu.github.io/pdf/DKTNet%20Dual-Key%20Transformer%20Network%20for%20s…...
设计模式之适配器模式(Adapter)
一、适配器模式介绍 适配器模式(adapter pattern )的原始定义是:将类的接口转换为客户期望的另一个接口, 适配器可以让不兼容的两个类一起协同工作。 适配器模式是用来做适配,它将不兼容的接口转换为可兼容的接口,让原本由于接口…...
[git] github管理项目之环境依赖管理
导出依赖到 requirements.txt pip install pipreqs pipreqs . --encodingutf8 --force但是直接使用pip安装不了torch,需要添加源!! pip install -r requirements.txt -f https://download.pytorch.org/whl/torch_stable.html想到一个麻烦的…...
【STM32 Blue Pill编程实例】-SD卡文件读写(SPI接口)
SD卡文件读写(SPI接口) 文章目录 SD卡文件读写(SPI接口)1、SD卡模块介绍2、硬件准备与接线3、模块配置3.1 SPI接口配置3.2 SPI接口的片选信号引脚配置3.3 FATFS配置4、代码实现在本文中,我们将介绍如何将 microSD 卡与 STM32 Blue Pill 连接,并在STM32CubeIDE中对SD卡进行…...
为什么需要软件测试?
软件测试 软件测试是评估和验证计算机程序或系统是否按预期运行的过程。 它涉及执行程序或系统以识别预期结果和实际结果之间的任何错误或差距。 目标是确保软件满足指定的要求,没有缺陷,并在不同场景中可靠地工作。 为什么需要软件测试?…...
成为超人:普通人如何白手起家,富一代和富二代的根本区别是什么?
成为超人:普通人如何白手起家,富一代和富二代的根本区别是什么? 我的问题是事业就讲 10 年装逼学习法失效① 光说不练,还是太懒真正的勤奋,解决温饱后,只专注赚钱这件事 ② 信念飘摇,随波流转万…...
Java 集合 Collection常考面试题
理解集合体系图 collection中 list 是有序的,set 是无序的 什么是迭代器 主要遍历 Collection 集合中的元素,所有实现了 Collection 的集合类都有一个iterator()方法,可以返回一个 iterator 的迭代器。 ArrayList 和 Vector 的区别? ArrayList 可以存放 null,底层是由数…...
C++继承与菱形继承(一文了解全部继承相关基础知识和面试点!)
目的减少重复代码冗余 Class 子类(派生类) : 继承方式 父类(基类) 继承方式共有三种:公共、保护、私有 父类的私有成员private无论哪种继承方式都不可以被子类使用 保护protected权限的内容在类内是可以访问,但是在…...
谷歌DeepMind 德米斯·哈萨比斯 因蛋白质预测AI荣获诺贝尔化学奖
2024年诺贝尔化学奖的一半授予了谷歌DeepMind的联合创始人兼首席执行官德米斯哈萨比斯和公司总监约翰M朱姆珀,以表彰他们在利用人工智能预测蛋白质结构方面的研究成果。另一半奖项则授予华盛顿大学生物化学教授大卫贝克,以表彰他在计算蛋白质设计领域的贡…...
256K上下文颠覆智能编程:Qwen3-Coder重构全栈开发效率范式
256K上下文颠覆智能编程:Qwen3-Coder重构全栈开发效率范式 【免费下载链接】Qwen3-Coder-30B-A3B-Instruct 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen3-Coder-30B-A3B-Instruct 问题发现:传统AI编程助手的三大痛点 2025年Stac…...
从“单点防御”到“全局联动”:手把手教你用EDR和NDR构建企业安全闭环
从“单点防御”到“全局联动”:手把手教你用EDR和NDR构建企业安全闭环 当企业的安全团队还在疲于应对零散的端点告警和网络流量异常时,攻击者早已开始采用自动化工具进行横向移动。传统孤立的防御手段就像用多个单点摄像头监控银行金库——每个摄像头都…...
Graphormer部署教程(RTX 4090):3.7GB模型显存占用仅18.2GB实测
Graphormer部署教程(RTX 4090):3.7GB模型显存占用仅18.2GB实测 1. 项目介绍 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子属性预测任务设计。这个模型在分子图(原子-键结构)的全局结构…...
MediaPipe农业智能化:10个精准农业与作物监测的创新应用
MediaPipe农业智能化:10个精准农业与作物监测的创新应用 【免费下载链接】mediapipe Cross-platform, customizable ML solutions for live and streaming media. 项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe MediaPipe作为谷歌开源的跨平…...
不止于超市:用QGIS缓冲区+叠置分析,为你的奶茶店、自习室找个好位置
从奶茶店到自习室:QGIS空间分析赋能小微商业选址决策 走在街头,你是否好奇为什么某些奶茶店总是门庭若市,而几步之隔的同类店铺却冷冷清清?商业选址从来不是简单的"地段好"三个字能概括的。对于资金有限的小微创业者来说…...
Qwen3-ASR-0.6B与Java集成:企业级语音处理方案
Qwen3-ASR-0.6B与Java集成:企业级语音处理方案 1. 引言 想象一下这样的场景:你的客服中心每天要处理成千上万的电话录音,传统的人工转录不仅成本高昂,还容易出错。或者你的移动应用需要实时语音转文字功能,但现有的云…...
SDXL 1.0插件开发:Photoshop脚本自动化集成
SDXL 1.0插件开发:Photoshop脚本自动化集成 1. 为什么需要Photoshop与SDXL 1.0的深度协作 设计师每天面对的不是单一工具,而是一整套工作流。当AI生成图像成为创意起点,问题就来了:生成的图片如何快速进入专业设计环节ÿ…...
迷宫问题求解:从递归到队列的算法实战与性能对比
1. 迷宫问题与三种经典解法 迷宫问题就像我们小时候玩的走迷宫游戏,需要在错综复杂的路径中找到一条从起点到终点的通路。在计算机科学中,迷宫被抽象成一个二维矩阵,其中0代表可通行的路径,1代表障碍物。这个问题看似简单…...
ESP32-S3驱动ILI9341屏幕避坑指南:从LVGL组件手动移植到流畅显示(ESP-IDF 5.4.1)
ESP32-S3驱动ILI9341屏幕避坑指南:从LVGL组件手动移植到流畅显示(ESP-IDF 5.4.1) 当你在ESP32-S3上尝试将LVGL移植到ILI9341屏幕时,可能会遇到各种奇怪的问题:内存溢出、屏幕模糊、驱动不匹配等。这些问题往往让开发者…...
JETSON平台SDKManager一站式部署指南:从刷机到外置存储系统迁移
1. 开箱即用:JETSON开发板基础准备 刚拿到JETSON开发板时,很多开发者会对着这块巴掌大的硬件发懵。以我经手过的几十块JETSON TX2 NX为例,正确的开箱姿势应该是先检查配件完整性。除了开发板本体,你还需要准备: 5V/4…...
