06-分布式消息队列Kafka

2023-11-06

目录

一,简介

1,什么是kafka

1.1 概念

1.2 特性

2,应用场景

二,原理

1,基本概念

1.1 Broker(代理)

1.2 Topic(主题)

1.3 Partition(分区)

1.4 Replication(副本)

1.5 Producer(消息生产者)

1.6 Consumer(消息消费者)

1.7 Consumer Group(CG,消费者组)

1.8 Zookeeper

2,工作机制

2.1 整体运作机制:

2.2 Broker数据分布

2.3 Partition写入

2.4 Topic数据消费

3,数据存储

3.1 Segment(段文件)

3.2 Offset(偏移量)

3.3 Kafka索引

4,高可用

4.1 多分区多副本 + Leader/Follower

4.2 双层选举


文章内容来自:南京大学 / 星环科技课程,大数据理论与实践课程Ⅰ

对细节部分引用其他网络资源进行补充。

一,简介

1,什么是kafka

1.1 概念

基于发布/订阅的分布式消息系统

由Linkedin开发,用Scala编写

1.2 特性

消息持久化:采用时间复杂度O(1)的磁盘存储结构,即使TB级以上数据也能保证常数时间的访问速度

高吞吐:即使在廉价的商用机器上,也能达到单机每秒10万条消息的传输

高容错:多分区多副本

易扩展:新增机器集群无需停机,自动感知

同时支持实时和离线数据处理

2,应用场景

异步通信:将消息放入Kafka,可以不立即处理

应用解耦:在应用处理过程中插入一个隐含的、基于数据的接口层

流量消峰:关键应用能够顶住访问峰值,不会因超出负荷而崩溃

二,原理

1,基本概念

1.1 Broker(代理)

Kafka的一个实例或节点,一个或多个Broker组成Kafka集群

 

1.2 Topic(主题)

Topic是Kafka中同一类数据的集合(贴同一标签),相当于数据库中的表

Producer将同一类数据写入同一个Topic,Consumer从同一个Topic中读取同类数据

Topic是逻辑概念,只需指定Topic就可以生产或消费数据,不必关心数据的物理存储

 

1.3 Partition(分区)

分区是一个有序的、不可修改的消息队列,分区内消息有序存储

一个Topic可分为多个分区,相当于把一个数据集分成多份,分别存储不同的分区中

Parition是物理概念,每个分区对应一个文件夹,存储分区的数据和索引文件

 

1.4 Replication(副本)

一个分区可以设置多个副本,副本存储在不同的Broker中

 

1.5 Producer(消息生产者)

向Broker发布消息的客户端

 

1.6 Consumer(消息消费者)

从Broker消费消息的客户端

 

1.7 Consumer Group(CG,消费者组)

每个Consumer都隶属于一个特定的CG

对于Topic中的某一消息,不同的CG可以重复读取该消息(组间共享),但一个CG中只能有一个Consumer可以读取该消息(组内互斥

 

1.8 Zookeeper

Kafka将主要的元数据保存在Zookeeper中

负责Kafka集群管理,包括配置管理、动态扩展、Broker负载均衡、Leader选举等

2,工作机制

2.1 整体运作机制:

2.2 Broker数据分布

消息在Broker中按Topic(主题)进行分类,相当于为每个消息打个标签

一个Topic可分为多个Partition(分区)

每个Partition可以有多个Replication(副本)

消息存储在Broker的某一Topic的某一Partition中,同时存在多个副本

2.3 Partition写入

Partition是一个FIFO队列, 发布消息采用在队列尾部追加的方式,消费消息采用在队列头部顺序读取的方式

一个Topic可分为多个Partition,仅保证同一分区内消息有序存储,不保证Topic整体(多个分区之间)有序

2.4 Topic数据消费

为了加快读取速度,多个Consumer可划分为一个组(Consumer Group, CG),并行消费同一个Topic

一个Topic可以被多个CG订阅,CG之间是平等的,即一个消息可同时被多个CG消费

一个CG可以有多个Consumer,CG中的Consumer之间是竞争关系,即一个消息在一个CG中只能被一个Consumer消费

 

3,数据存储

3.1 Segment(段文件)

Segment文件是Kafka的最小数据存储单元,一个Partition包含多个Segment文件

Segment文件由以消息在Partition中的起始偏移量命名的数据文件(*.log)和索引文件(*.index、*.timeindex)组成

每个Partition副本都是一个目录,目录中包含若干Segment文件

3.2 Offset(偏移量)

Offset是定位分区中消息的顺序编号

Offset用于在分区中唯一标识消息

推荐由Kafka(而不是Zookeeper)来存储和维护Offset,即在Broker中记录和重置每个Comsumer读取分区消息的偏移量。也可以选择由Zookeeper来存储和维护,但效率会有一定影响

3.3 Kafka索引

为了提高消息写入和查询速度,为每个Partition创建索引,索引文件存储在Partition文件夹下

  • 偏移量索引
  • 文件以offset偏移量为名称,以index为后缀索引数据格式:<offset, position>
  • 采用稀疏存储方式

时间戳索引

  • 文件以timeindex为后缀
  • 索引数据格式:<timestamp, offset>
  • 采用稀疏存储方式

 

4,高可用

4.1 多分区多副本 + Leader/Follower

Kafka早期版本没有Replication概念,一旦某个Brocker宕机,其上的分区数据就可能丢失

一个Topic可以有多个分区,每个分区可以有多个副本,副本存储在不同的Broker中

从一个分区的多个副本中选举一个Partition Leader,由Leader负责读写,其他副本作为Follower从Leader同步消息

4.2 双层选举

Controller Leader选举

  • 每个Broker启动时都会创建一个Controller进程
  • 通过Zookeeper,从Kafka集群中选举出一个Broker作为Controller Leader
  • Controller Leader负责管理分区和副本状态,避免分区副本直接在Zookeeper上注册Watcher和竞争创建临时Znode,导致Zookeeper集群负载过重

Partition Leader选举

  • Controller Leader负责Partition Leader的选举
  • ISR列表(In Sync Replica)。ISR是Zookeeper中的候选分区副本同步列表,负责保存候选分区副本(Partition Follower)的状态信息
  • Partition Leader负责跟踪和维护ISR
  • Partition Follower定期从Leader同步数据,若Follower心跳超时或消息落后太多,将被移除出ISR
  • Partition Leader挂掉后,Controller Leader从ISR中选择一个Follower作为新的Leader 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

06-分布式消息队列Kafka 的相关文章

  • mycat分库分表

    一 拆分原理 数据节点 分片 主机 ip port 数据库组合起来就是一个数据节点 分库 垂直拆分 不同的表分到不同的数据节点 分表 水平拆分 同一张表按照一定的规则拆分到不同的数据节点 二 mycat逻辑图 应用连接mycat mycat

随机推荐

  • 【编程之路】面试必刷TOP101:堆、栈、队列(42-49,Python实现)

    面试必刷TOP101 堆 栈 队列 42 49 Python实现 42 用两个栈实现队列 小试牛刀 step 1 push操作就正常push到第一个栈末尾 step 2 pop操作时 优先将第一个栈的元素弹出 并依次进入第二个栈中 step
  • 梦幻西游两个不同服务器的名字出现在跨服华山,系统会怎么处理,梦幻西游跨服决战华山玩法介绍...

    梦幻西游跨服决战华山新玩法已经出来了 很多的玩家还不知道该如何玩 下面我们一起来看详细的内容介绍 活动时间 没有帮派竞赛的周五 周日 进入活动场地时间 19 00 比赛时间 19 30 22 00 等级限制 等级 55级 分组机制 根据玩家
  • DLL,SDK,API专业技术术语

    SDK software development kit 中文可译为 软件开发工具包 一般都是一些被软件工程师用于为特定的软件包 软件架构 硬件平台 操作系统等建立应用软件的开发工具的集合 通俗点是指由第三方服务商提供的实现软件产品某项功能
  • 腾讯toB“联合舰队”的秘密

    14 天高强度谈判 每天都从早 8 点持续到凌晨 3 点 郭浩哲和他的同事们敲定了一笔融资 投资方是腾讯 投资金额达到了 12 66 亿元人民币 即使在腾讯的投资历史上 这都不是一个小数额 但实际流程仅用时一个多月 多少让郭浩哲对巨头的速度
  • Eclipse 安装C++环境

    安装CDT插件 方法一 选择 help 安装新的软件 然后点击Add 给定名称为 CDT 添加地址 http download eclipse org tools cdt releases juno 点击FInish 等待安装完成 提示重启
  • 第一课:初识Java语言

    第一课 初识Java语言 一 了解Java的历史由来 1 为什么学习Java编程语言 1 首先要了解编程语言的流行趋势 Tiobe PYPL排行榜 2 在这些排行榜上 Java语言的流行程度都名列前茅 在Tiobe排行榜上 甚至常年 排名第
  • 854. 相似度为 K 的字符串

    对于某些非负整数 k 如果交换 s1 中两个字母的位置恰好 k 次 能够使结果字符串等于 s2 则认为字符串 s1 和 s2 的 相似度为 k 给你两个字母异位词 s1 和 s2 返回 s1 和 s2 的相似度 k 的最小值 示例 1 输入
  • flea-jersey使用之文件上传接入

    文件上传 引言 1 客户端依赖 2 服务端依赖 3 文件上传接入讲解 3 1 服务端上传资源定义 3 2 服务端文件上传服务定义 3 3 客户端文件上传配置 3 4 客户端文件上传调用 引言 本文将要介绍 flea jersey 提供的文件
  • c++回调函数

    关于应用 1 创建struct结构体 typedef struct tag PixelCallBack AsynCall PixelCallBack 2 在 h 文件类中定义private 结构体变量 typedef void func c
  • pytorch——实现自编码器和变分自编码器

    文章目录 数据降维 主成分分析 PCA 自编码器 AE 变分自编码器 VAE pytorch实现 AE 实现自编码器网络结构 实现AE对MNIST数据集的处理 VAE 实现变分自编码器网络结构 实现VAE对MNIST数据集的处理 本文只设计
  • flutter video_player pageView 视频分页播放自适应视频宽高

    1 新建播放组件 预览图和文案可以删除也可以重新自定义 主要是视频地址 import dart async import package flutter material dart import package midou ee car v
  • 一個简洁的 antd-react-admin 应用 -- React + Antd 通用后台管理系统

    React Antd Admin 简介 React Antd Admin 一个 JavaScript 应用 项目由业界最优秀的 React 应用开发工具 create react app 初始化创建 搭配 Antd 开箱即用的高质量 Rea
  • Cannot resolve plugin org.apache.maven.plugins:maven-surefire-plugin:2.12.4_idea创建maven项目时异常

    Cannot resolve plugin org apache maven plugins maven surefire plugin 2 12 4 idea创建maven项目时异常 Git上拉下一个maven项目 在更新和build时
  • springboot 之 在Controller如何接收参数呢?

    转自 springboot 之 在Controller如何接收参数呢 下文笔者将讲述Controller中接收url路径中的参数 表单 问号后面参数 body中的JSON信息 使用 PathVariable 直接使用String定义变量 使
  • 神经网络结构--前

    目前神经网络基本是业内无人不知了 在正式了解神经网络之前 有兴趣的爱好者可以了解一下神经网络出现前的一些发展历史 实际上呢 每个聊神经网络的人 都会先放一张神经元的图片 我就偷懒算了吧 怕大家看吐了 1943年 心理学家W Mcculloc
  • [论文阅读] (27) AAAI20 Order Matters: 基于图神经网络的二进制代码相似性检测(腾讯科恩实验室)

    娜璋带你读论文 系列主要是督促自己阅读优秀论文及听取学术讲座 并分享给大家 希望您喜欢 由于作者的英文水平和学术能力不高 需要不断提升 所以还请大家批评指正 非常欢迎大家给我留言评论 学术路上期待与您前行 加油 前一篇文章介绍Excel论文
  • react 加粗_React入门的家庭作业(7?)【番外篇】

    回顾 在上一篇里完成了一个有以下功能的xxoo棋 三连棋游戏的所有功能 能够判定玩家何时获胜 能够记录游戏进程 允许玩家查看游戏的历史记录 也可以查看任意一个历史版本的游戏棋盘状态 在游戏历史记录列表显示每一步棋的坐标 在历史记录列表中加粗
  • 如何让中小学生参加机器人竞赛

    机器人竞赛的目的是通过比赛提升技能 教育机器人竞赛与其他类型的赛事相比 除了提升机器人技能外 还多了一项教育功能 格物斯坦小坦克来说说机器人竞赛给青少年带来什么 机器人是一种承接AI学习成果的载体 孩子们通过编程设计 可以制造出属于自己的个
  • 单例bean、单例模式、单例池的区别

    单例bean相关 如下通过applicationContext registerBean方法注册一个bean 这个bean默认是单例bean 那么说spring容器里只能有一个User类型的bean正确吗 答案是不正确 我们可以通过xml方
  • 06-分布式消息队列Kafka

    目录 一 简介 1 什么是kafka 1 1 概念 1 2 特性 2 应用场景 二 原理 1 基本概念 1 1 Broker 代理 1 2 Topic 主题 1 3 Partition 分区 1 4 Replication 副本 1 5 P