当前位置: 首页 > news >正文

消息队列 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 中&#xff0c;如果你在 CASE 表达式中定义了多个 WHEN 子句&#xff0c;并且这些条件有重叠&#xff0c;那么 CASE 表达式的执行顺序遵循以下规则&#xff1a; &#xff08;1&#xff09;从上到下&#xff1a;SQL 引擎会按照 CASE …...

压力测试Jmeter简介

前提条件&#xff1a;要安装JDK 若不需要了解&#xff0c;请直接定位到左侧目录的安装环节。 1.引言 在现代软件开发中&#xff0c;性能和稳定性是衡量系统质量的重要指标。为了确保应用程序在高负载情况下仍能正常运行&#xff0c;压力测试变得尤为重要。Apache JMeter 是一…...

cesium 与 threejs 对比

Cesium 和 Three.js 都是用于在 Web 浏览器中创建和渲染 3D 图形的强大 JavaScript 库&#xff0c;但它们有显著的不同之处&#xff0c;主要体现在应用领域、功能集和使用场景上。 以下是两者之间的对比&#xff1a; 1. 应用场景 Three.js: 适用于广泛的 3D 图形应用&#xff…...

探索QScreen的信号与槽:动态响应屏幕变化

在处理屏幕显示和多显示器环境时&#xff0c;QScreen 提供了一些特有的信号&#xff0c;这些信号可以在屏幕的变化时通知应用程序&#xff0c;帮助我们动态地适配和响应显示设备的变化。今天&#xff0c;我们将深入探讨如何使用 QScreen 的信号与槽&#xff0c;并展示适用的使用…...

vLLM项目加入PyTorch生态系统,引领LLM推理新纪元

近日&#xff0c;vLLM项目宣布正式成为PyTorch生态系统的一部分&#xff0c;标志着该项目与PyTorch的合作进入了一个全新的阶段。本文将从以下几个方面进行介绍&#xff0c;特别提醒&#xff1a;安装方案在第四个部分&#xff0c;可选择性阅读。 vLLM项目概述 vLLM的成就与实际…...

索引-介绍结构语法

一.概述&#xff1a; 1.当给某个字段创建索引后&#xff0c;就会把字段生成二叉排序树进行查找&#xff0c;大大增加了查找效率&#xff0c;比不创建索引时用的全表扫描好得多。 2.二叉排序树&#xff1a;小的在左边&#xff0c;大的在右边(查找和存放都遵循这个原则)。 3.注…...

SpringBoot整合JDBC

讲到这里&#xff0c;基本上我们就可以使用SpringBoot来开发Web项目视图显示和业务逻辑代码&#xff0c;但是要做一个完成案例&#xff0c;我们还差一点点&#xff0c;就是怎么访问数据库&#xff0c;获取数据&#xff0c;接下来我们就看怎么用SpringBoot整合我们前面已经讲过的…...

XXE靶场

XXE-lab 靶场 靶场网址&#xff1a;http://172.16.0.87/ 第一步我们看到网站有登录框我们试着用 bp 去抓一下包 将抓到的包发到重放器中 然后我们构建palody <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "php://filter/readconvert.base64-encode/resourceC:/flag/fla…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践

在电商行业蓬勃发展的当下&#xff0c;多平台运营已成为众多商家的必然选择。然而&#xff0c;不同电商平台在商品数据接口方面存在差异&#xff0c;导致商家在跨平台运营时面临诸多挑战&#xff0c;如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...

用js实现常见排序算法

以下是几种常见排序算法的 JS实现&#xff0c;包括选择排序、冒泡排序、插入排序、快速排序和归并排序&#xff0c;以及每种算法的特点和复杂度分析 1. 选择排序&#xff08;Selection Sort&#xff09; 核心思想&#xff1a;每次从未排序部分选择最小元素&#xff0c;与未排…...