消息队列 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中)
队列:存储消息的地方,直到它们被消费者获取(在某些情况下,队列可以设置为持久化,以确保即使在系统故障后消息也不会丢失)
相关文章:
消息队列 Kafka 架构组件及其特性
Kafka 人们通常有时会将 Kafka 中的 Topic 比作队列; 在 Kafka 中,数据是以主题(Topic)的形式组织的,每个 Topic 可以被分为多个分区(Partition)。每个 Partition 是一个有序的、不可变的消息…...
网络攻击与防范
目录 选填 第一章 1、三种网络模式 2、几种创建网络拓扑结构 NAT模式 VPN模式 软路由模式1 软路由模式2 3、Linux网络配置常用指令 4、常见网络服务配置 DHCP DNS Web服务与FTP服务 FTP用户隔离 第二章 DNS信息收集(dnsenum、dnsmap) 路…...
文献研读|基于像素语义层面图像重建的AI生成图像检测
前言:本篇文章主要对基于重建的AI生成图像检测的四篇相关工作进行介绍,分别为基于像素层面重建的检测方法 DIRE 和 Aeroblade,以及基于语义层面重建的检测方法 SimGIR 和 Zerofake;并对相应方法进行比较。 相关文章:论…...
【操作系统】为什么需要架构裁剪?
为什么需要架构裁剪? 原因 减小核心大小提高架构初始化速度降低内存占用提高系统性能移除不需要的功能,增加安全性 裁剪方法 初始化配置设置功能模块化移除不需要的驱动底层 一般裁剪对象(以操作系统为例) 文件系统的支持网…...
LSTM长短期记忆网络
LSTM(长短期记忆网络)数学原理 LSTM(Long Short-Term Memory)是一种特殊的递归神经网络(RNN),解决了标准RNN中存在的梯度消失(Vanishing Gradient) 和**梯度爆炸&#x…...
基于前端技术UniApp和后端技术Node.js的电影购票系统
文章目录 摘要Abstruct第一章 绪论1.1 研究背景与意义1.2 国内外研究现状 第二章 需求分析2.1 功能需求分析2.2 非功能性需求分析 第二章系统设计3.1 系统架构设计3.1.1 总体架构3.1.2 技术选型 3.2 功能架构 第四章 系统实现4.1 用户端系统实现4.1.1 用户认证模块实现4.1.2 电…...
数据结构与算法:稀疏数组
前言 此文以整型元素的二维数组为例,阐述稀疏数组的思想。其他类型或许有更适合压缩算法或者其他结构的稀疏数组,此文暂不扩展。 稀疏数组的定义 在一个二维数据数组里,由于大量的元素的值为同一个值,比如 0或者其他已知的默认值…...
Meta重磅发布Llama 3.3 70B:开源AI模型的新里程碑
在人工智能领域,Meta的最新动作再次引起了全球的关注。今天,我们见证了Meta发布的Llama 3.3 70B模型,这是一个开源的人工智能模型,它不仅令人印象深刻,而且在性能上达到了一个新的高度。 一,技术突破&#…...
VSCode中的Black Formatter没有生效的解决办法
说明 如果正常按照配置进行的话,理论上是可以生效的。 "[python]": {"editor.defaultFormatter": "ms-python.black-formatter","editor.formatOnSave": true }但我在一种情况下发现不能生效,应为其本身的bug…...
【潜意识Java】蓝桥杯算法有关的动态规划求解背包问题
目录 背包问题简介 问题描述 输入: 输出: 动态规划解法 动态规划状态转移 代码实现 代码解释 动态规划的时间复杂度 例子解析 输出: 总结 作者我蓝桥杯:2023第十四届蓝桥杯国赛C/C大学B组一等奖,所以请听我…...
Odoo:免费开源ERP的AI技术赋能出海企业电子商务应用介绍
概述 伴随电子商务的持续演进,客户对于便利性、速度以及个性化服务的期许急剧攀升。企业务必要探寻创新之途径,以强化自身运营,并优化购物体验。达成此目标的最为行之有效的方式之一,便是将 AI 呼叫助手融入您的电子商务平台。我们…...
微信小程序苹果手机自带的数字键盘老是弹出收起,影响用户体验,100%解决
文章目录 1、index.wxml2、index.js3、index.wxss1、index.wxml <!--index.wxml--> <view class="container"><view class="code-input-container"><view class="code-input-boxes"><!-- <block wx:for="{{…...
sql中case when若条件重复 执行的顺序
sql case when若条件重复 执行的顺序 在 SQL 中,如果你在 CASE 表达式中定义了多个 WHEN 子句,并且这些条件有重叠,那么 CASE 表达式的执行顺序遵循以下规则: (1)从上到下:SQL 引擎会按照 CASE …...
压力测试Jmeter简介
前提条件:要安装JDK 若不需要了解,请直接定位到左侧目录的安装环节。 1.引言 在现代软件开发中,性能和稳定性是衡量系统质量的重要指标。为了确保应用程序在高负载情况下仍能正常运行,压力测试变得尤为重要。Apache JMeter 是一…...
cesium 与 threejs 对比
Cesium 和 Three.js 都是用于在 Web 浏览器中创建和渲染 3D 图形的强大 JavaScript 库,但它们有显著的不同之处,主要体现在应用领域、功能集和使用场景上。 以下是两者之间的对比: 1. 应用场景 Three.js: 适用于广泛的 3D 图形应用ÿ…...
探索QScreen的信号与槽:动态响应屏幕变化
在处理屏幕显示和多显示器环境时,QScreen 提供了一些特有的信号,这些信号可以在屏幕的变化时通知应用程序,帮助我们动态地适配和响应显示设备的变化。今天,我们将深入探讨如何使用 QScreen 的信号与槽,并展示适用的使用…...
vLLM项目加入PyTorch生态系统,引领LLM推理新纪元
近日,vLLM项目宣布正式成为PyTorch生态系统的一部分,标志着该项目与PyTorch的合作进入了一个全新的阶段。本文将从以下几个方面进行介绍,特别提醒:安装方案在第四个部分,可选择性阅读。 vLLM项目概述 vLLM的成就与实际…...
索引-介绍结构语法
一.概述: 1.当给某个字段创建索引后,就会把字段生成二叉排序树进行查找,大大增加了查找效率,比不创建索引时用的全表扫描好得多。 2.二叉排序树:小的在左边,大的在右边(查找和存放都遵循这个原则)。 3.注…...
SpringBoot整合JDBC
讲到这里,基本上我们就可以使用SpringBoot来开发Web项目视图显示和业务逻辑代码,但是要做一个完成案例,我们还差一点点,就是怎么访问数据库,获取数据,接下来我们就看怎么用SpringBoot整合我们前面已经讲过的…...
XXE靶场
XXE-lab 靶场 靶场网址:http://172.16.0.87/ 第一步我们看到网站有登录框我们试着用 bp 去抓一下包 将抓到的包发到重放器中 然后我们构建palody <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "php://filter/readconvert.base64-encode/resourceC:/flag/fla…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...
UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...
