消息队列 Kafka 架构组件及其特性

Kafka

人们通常有时会将 Kafka 中的 Topic 比作队列;
 

在 Kafka 中,数据是以主题(Topic)的形式组织的,每个 Topic 可以被分为多个分区(Partition)。每个 Partition 是一个有序的、不可变的消息序列,这与队列的概念有些相似。

组件

一、Producer(生产者)

Kafka 为了提升消息发送速率,生产者默认采用批量发送的方式发送消息至 Broker;
 

一条发送多少条由参数 batch.size 决定(默认16K);
 

产生消息并将其发送给消息代理的应用程序或服务。生产者创建消息并将它们放入特定的消息队列主题中。生产者是创建并发送消息的实体。它可以是一个应用程序、服务或进程

二、Broker(服务器)

Broker 就是 kafka 的服务器,用于存储和管理消息,默认端口是9092;
 

生产者和 Broker 建立连接,将消息发送到服务器上存储起来;
 

消费者跟 Broke r建立连接,订阅和消费服务器上存储的消息;
 

消息处理中心。消息队列系统的核心组件,负责接收、存储和转发消息。消息代理充当生产者和消费者之间的中介,确保消息能够从一个地方安全的传输到另一个地方。

三、Consumer(消费者)

订阅,接收消息的一方叫消费者;
 

消费者获取消息有两种模式:Pull模式(拉)(消费者主动从消息队列中获取消息);Push模式(推)(Broker 把消息推送给消费者);
 

Kafka 采用的是 Pull 模式,因为 Kafka 是支持大数据的,如果采用 Push 模式的话,海量数据可能把下游消费端给打爆,所以 Kafka 采用 Pull 模式推送消息;
 

Pull 模式,消费者可以控制一次到底获取多少条消息(max.pull.records 默认是500)。

四、Record(消息)

客服端传输的数据叫做消息,在 Kafka 中也叫 Record;
 

Record 在客户端是一个 KV 键值对(ProducerRecord,ConsumerRecord);
 

Record 在服务端是一个 KV 键值对(RecordBatch(批量发送)或 Record)。
 

实际的数据单位,可以是任何类型的信息,如文本、图片等。

Topic(主题)

Topic 一个逻辑概念,可以理解为一组消息的集合;
 

生产者和消费者通过 topic 进行消息的写入和读取;
 

生产者发送消息时,若 topic 不存在,是否自动创建:auto.create.topics.enable(建议关闭);
 

某些消息队列系统支持 发布/订阅 模型,在这种情况下,消息会被发送到一个主题而不是直接到队列。多个消费者可以订阅同一个主题以接收该主题下的所有消息。

Partition(分区)

就是把一个topic分成几个不同的部分;
 

一个topic在创建时可以划分多个分区,若没有指定,默认分区数为1,可通过参数修改(num.partitions);
 

Kafka 中修改分区规则:可加,不可减。

Replica(副本机制)

和分区结合起来是Kafka实现高可用和负载均衡的原理
 

Replica(副本)是 Partition(分区)的副本,每个分区可以有若干个副本(但是不能超过集群数量);
 

副本必须在不同的Broker上,副本包括了主从节点(Leader,Foller);
 

服务端可以通过参数控制默认副本数(offsets.topic.replication.factor)(一般不这样用,一般直接通过命令设置副本数);
 

生产者只会往 leader 节点发送消息,消费者也只会从 leader 节点读取消息。

Segment(段)

Kafka 的数据文件是写在 .log 文件里面的,另外一起还生成对应的索引 .index 文件和对应的时间 .timeIndex 文件;

但是很容易的可以理解,如果一直往一个log文件里面追加数据,那么长时间使用之后log文件的查找会随着数据量变大而变慢,所以在这种情况下就引入了 Segment段 的概念;

Segment 的目的是:建一个分区的数据划分、存储到不同的文件中;

每个 Segment 至少由一个数据文件和2个索引文件构成,3个文件是成套出现的;

引入段的意义:加快查询效率、删除数据时减少逐条IO;

Segement 大小控制:按时间周期生成 log.roll.hours(默认一周)、按文件大小生产 log.segment.bytes(默认1G)。

Consumer Group(消费者组)

由于生产者可能短时间内生产大量消息,为了提升消息的消费速率,就增加了消费者组的概念(group id);
 

使用消费者组,提升消费效率和吞吐量;
 

同一个 Group 中的消费者,不能消费相同的分区(group id 相同,在一个组内)。

负载均衡:
        在同一个消费者组内的消费者会自动分配主题中的分区。如果消费者的数量小于或等于主题的分区数,那么每个消费者将被分配到一个或多个分区;如果消费者的数量超过了分区的数量,那么多余的消费者将处于空闲状态,不会接受任何消息

高可用性和容错性:

        如果某个消费者失败了或者停止运行,它的分区会被重新分配给组内的其它活跃消费者,确保消息继续被处理,这被称为再平衡(再平衡机制保证了即使有消费者假如或离开,整个组仍然能够持续稳定的消费消息)

并行处理:

        通过增加同一消费者组中的消费者数量,可以提高对消息的并行处理能力。但是,最大并行度受限于主题的分区数,因为每个分区只能由一个消费者消费


消费进度跟踪:

        每个消费者组维护自己的消费偏移量(Offset),记录已经消费过的消息位置。kafka默认会定期提交这些偏移量,以确保在消费者重启后可以从上次的位置继续消费


独立消费流:

        不同的消费者组可以独立的消费相同主题的消息,而不会相互影响。这意味着一个主题的消息可以被多个不同的应用或服务同时消费。

Consumer Offset(偏移量)(Kafka,单分区消息顺序消费的原因)

Kafka 在单分区里面的消息是顺序存储的;
 

Offset(偏移量)的目的在于:记录消费者的消费位置;
 

Kafka 现行版本将 Offset 保存在服务器(__consumer_offsets_)主题中(0.9版本以前是在zooKeeper中)

队列:存储消息的地方,直到它们被消费者获取(在某些情况下,队列可以设置为持久化,以确保即使在系统故障后消息也不会丢失)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot460实习生管理系统设计和实现(论文+源码)_kaic

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本实习生管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

C#中方法参数传值和传引用的情况

对于引用类型 - 传类类型的具体值时 此时传的是引用 - 单纯传类类型 此时传的是个test引用的副本,在方法内修改的是这个副本的指向 传string,集合同理,只要是指向新对象,就是引用副本在指向 对于值类型 - 传普通值类型 …

游戏AI实现-寻路算法(A*)

A*(A-star)是一种图遍历和寻路算法,由于其完整性、最优性和最佳效率,它被用于计算机科学的许多领域。给定一个加权图、一个源节点和一个目标节点,该算法将找到从源到目标的最短路径(相对于给定的权重&#…

Autosar入门_架构(Architecture)

上一篇 | 返回主目录 | 下一篇 架构(Architecture) 1 Autosar架构分层概述2 MCAL3 ECU抽象层4 复杂设备驱动5 服务层6 RTE7 应用软件层1 Autosar架构分层概述 整体架构分为三层:应用软件(APP)、实时运行环境(RTE)、基础软件(BSW)以下架构对BSW进行了细化,主要包含四…

【计算机网络2】计算机网络的性能能指标

目录 一 、计算机网络的性能指标 二、具体介绍 1、速 率 2、带 宽 3、吞 吐 量 4、时 延 5、时延带宽积 6、往 返 时 延 7、信道利用率 一 、计算机网络的性能指标 计算机网络的性能指标就是从不同方面度量计算机网络的性能,有如下7个指标: 速…

Oracle 中间件 Webcenter Portal服务器环境搭建

环境信息 服务器基本信息 如下表,本次安装总共使用2台服务器,具体信息如下: Webcenter1服务器 归类 SOA服务器 Ip Address 172.xx.xx.xx.xx HostName wcc01.xxxxxx.com Alias wccprd01 Webcenter2服务器 归类 OSB服务器 Ip Addr…

【游戏设计原理】20 - 囚徒困境

一、分析与总结 1. 核心思想 囚徒困境是一种非零和博弈模型,揭示了理性自利个体在决策时的矛盾:在短期利益和长期合作之间往往存在冲突。 合作与背叛:博弈者可以选择合作(短期牺牲,换取长远收益)或背叛&…

线性代数期末总复习的点点滴滴(1)

一、可逆矩阵、行列式、秩的关系 1.行列式与可逆矩阵的关系 所以,不难看出矩阵可逆的充分必要条件是该矩阵的行列式不为0。 2.接着来看,满秩和矩阵行列式的关系 不难看出满秩和行列式不为0是等价的。 3.再来看,满秩和矩阵可逆的关系 说明了…

ubuntu22.04编译安装Opencv4.8.0+Opencv-contrib4.8.0教程

本章教程,主要记录在Ubuntu22.04版本系统上编译安装安装Opencv4.8.0+Opencv-contrib4.8.0的具体过程。 一、下载opencv和opencv-contrib包 wget https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip wget https://github.com/opencv/opencv_contrib/archive/refs/…

2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程

2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程 产品介绍 仿东郊到家约玩系统是一种新兴的线上预约,线下社交、陪伴、助娱、助攻、分享、解答、指导等服务模式,范围涉及电竞、运动、音乐…

算法学习(十六)—— 综合练习

目录 1863. 找出所有子集的异或总和再求和 47. 全排列 Ⅱ 17. 电话号码的字母组合 22. 括号生成 77. 组合 494. 目标和 39. 组合总和 784. 字母大小写全排列 526. 优美的排列 51. N皇后 36. 有效的数独 37. 解数独 79. 单词搜索 1219. 黄金矿工 980. 不同路径 Ⅲ…

「Mac畅玩鸿蒙与硬件45」UI互动应用篇22 - 评分统计工具

本篇将带你实现一个评分统计工具,用户可以对多个选项进行评分。应用会实时更新每个选项的评分结果,并统计平均分。这一功能适合用于问卷调查或评分统计的场景。 关键词 UI互动应用评分统计状态管理数据处理多目标评分 一、功能说明 评分统计工具允许用…

2023年下半年软考信息安全工程师案例分析及答案解析

试题一(16分) 回答问题1至问题6,将解答填入答题纸对应的解答栏内。 问题1(4分) 已知DES算法S盒如下,请补全S盒空缺的数据(1)、(2)、(3)、(4)。 【参考答案】3、13、15、0 问题2(2分) 已知S盒的输入为110011,请计算经过S盒变换之后的二进制输出。 【参考…

HUAWEI-eNSP交换机链路聚合(手动负载分担模式)

配置思路:HUAWEI交换机链路聚合有LACP模式跟手动负载分担模式,本文主打手动负载分担模式:首先交换机-PC之间划分基本vlan,交换机-交换机之间创建链路聚合组,划分端口至链路聚合分组(缺省模式为手动负载分担模式)。结果验证要求同vlan可以ping通,关闭某个聚合端口后仍可…

如何缩放组件

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了Checkbox Widget相关的内容,本章回中将介绍Transform Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的Transform是一种容器类widget,它和Container组件类似。它可以包含其它的组件,并…

MacOS安装MySQL

官网下载MySQL 苹果芯片选择ARM版本 安装过程中会要求你输入root的密码(不少于8位),这里设置为12345678 打开系统设置查看是否成功安装MySQL 配置MySQL环境变量 vi ~/.zshrc加入一行export PATH$PATH:/usr/local/mysql/bin 执行source ~/…

Tomcat部署war包项目解决404问题

问题出在了Tomcat的版本上了,应该先去看这个项目使用的springboot版本,然后去仓库里找到对应Tomcat版本。 Maven Repository: org.springframework.boot spring-boot-starter-tomcat 因此我们应该选择Tomcat9版本。 当我把Tomcat11换成Tomcat9时&…

3D工具显微镜的测量范围

一、测量尺寸范围 样品尺寸: 3D工具显微镜通常能够测量各种尺寸和形状的样品,从小至微米级别的微小结构到大至几厘米甚至更大的物体。具体的测量尺寸范围取决于显微镜的载物台大小、镜头焦距以及软件处理能力。测量精度: 3D工具显微镜的测量…

MySql:基本查询

✨✨作者主页:嶔某✨✨ ✨✨所属专栏:MySql✨✨ 本文的代码中, [ ] 里面的都可以省略 在 MySQL 中,CRUD 是数据库操作的核心,代表以下四种基本操作: C(Create):创建、插…

git remote -v(--verbose)显示你的 Git 仓库配置的远程仓库的详细信息

git remote -v 是一个 Git 命令,用于显示你的 Git 仓库配置的远程仓库的详细信息。 当你执行 git remote -v 命令时,你会看到类似以下的输出: origin https://github.com/your-username/your-repo.git (fetch) origin https://github.com…