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

02_kafka_基本概念_基础架构

文章目录

  • 常见的消息队列工作模式
  • 基本概念
  • kafka 特性
  • Kafka 基本架构
    • topic 分区的 目的/ 好处
  • 日志存储形式
  • 消费者,消费方式 逻辑
    • 消费组
  • 高性能
    • 写入: 顺序写+ mmap
    • 读取:零拷贝+DMA
  • 使用场景


常见的消息队列工作模式

  • 至多一次:消息被确认消费后,删除消息;一般只允许被一个消费者消费,且队列中的数据不允许被重复消费。activeMQ 就是这种。
  • 没有限制:消息可以被多个消费者同时消费,并且同一个消费者可以多次消费同一个记录;大数据场景。

基本概念

  • 集群中的一则消息也称为 Record
  • Topic 用于分类集群中的消息-record;每个topic 可以有多个订阅者。(topic 是一种逻辑上的概念)
  • 每一个Record 只属于一个Topic;
  • 分区日志 partition: 用于持久化存储 topic 中的 record;生产者决定 record 发送到 topic 中的哪一个partition 中;
  • Broker: 一个具体的消息服务实例;
  • Leader: Broker 中语言读写数据的角色
  • follower:同步leader 数据,leader如果宕机, 用于选举新leader,来读写
  • 集群中的 Leader 的监控 和 Topic 元数据 存储在 Zookeeper 中

kafka 特性

  • 高吞吐率
  • 海量存储

Kafka 基本架构

架构

topic 分区的 目的/ 好处

  • 对 topic 容量的提升:属于同一个 topic 的日志分散到多个 服务器 扩展了单机的容量,还可以扩缩容;
  • 提高并发/ 分流:集群中 不同 的服务器作为不同 分区的 leader,提高 io 能力,均衡系统负载
  • 在使用消费组时,增加分区也会增加 消费能力
  • (每个分区需要适配 托管它的服务器)

日志存储形式

  • 每组日志分区时一个有序的不可变的日志序列,分区中的每一个Record 都被分配了唯一的序列编号 称为 offset, record 会持久化;
  • 时间越早,序号越小;
  • 使用硬盘存储日志文件。(性能问题)
  • kafka 会定期检查日志文件,然后将过期的数据从log 中移除;
  • 由于分区的存在,及写入策略的不同,kafka 只能保证单个分区的先入先出的顺序性, 无法保证多个分区之间的顺序性。也就是不是严格意义上的先进先出
  • 所以,如果需要让kafka 保证顺序那就可以采用不分区的方式。

消费者,消费方式 逻辑

  • 每个消费者维护自己本次消费对应分区的偏移量;
  • 由上,多个消费者之间相互独立;
  • 消费者在消费完一个批次的数据后,将本次消费的偏移量( 实际是offset+1,是下次读取的起始位置)提交给 kafka 集群;
  • 所以,对每个消费者而言可以随意的控制 消费者的偏移量;消费者可以从一个 topic 分区中的任意位置读取数据。

消费组

  • 消费者使用 Consumer Group 名称标记自己;
  • 发布到Topic 的每条记录都会传递到每个 消费组 中的一个消费者;也就是说,一个分区上的消息还是仅由组中的一个 消费者 消费;
  • 新加入组的实例,会接管其他消费者负责的某些分区(是否优先接管负载大的消费者的分区?)
  • 组中的消费者个数 一般 不会大于 topic中 分区的数量;多的只能作为备用
  • 基于的是均分策略;

消费组

  • (就是消费者的分身,是一种逻辑上的消费者,视为一个消费者;)
  • (提高了消费者的吞吐量,在组中的实例间 均分消费)
  • (提高了消费者的 可用性/容错性 ,一个 消费者 下线,其负责的分区将由组中的其他实例 负责处理 )

高性能

写入: 顺序写+ mmap

  • mmap 内存传入 fd 直接映射文件,对应内核 PageCache;
  • kafka 写入 mmap 映射的内存;OS 自动刷写磁盘(数据丢失问题?#2)
  • 顺序写入;

读取:零拷贝+DMA

  • 零拷贝(用户空间零拷贝): 数据不经过用户空间,从 内核缓冲区 直接拷贝到socket 缓冲区,然后发送出去;
  • dma 协处理器:传统io 需要cpu 在磁盘驱动器缓冲区与内核缓冲区之间来回拷贝,过程中磁盘反复发出中断,cpu还需要反复处理中断;引入dma后 cpu 来回拷贝、中断处理 的动作由dma 完成,拷贝完成后/ 数据足够多后 通知cpu。期间 cpu 可以用于处理其他任务。

使用场景

  • 解耦,异步通信,削峰填谷
  • 大数据

相关文章:

02_kafka_基本概念_基础架构

文章目录 常见的消息队列工作模式基本概念kafka 特性Kafka 基本架构topic 分区的 目的/ 好处 日志存储形式消费者,消费方式 逻辑消费组 高性能写入: 顺序写 mmap读取:零拷贝DMA 使用场景 常见的消息队列工作模式 至多一次:消息被…...

HTTP 常用状态码 301 302 304 403

HTTP 常用状态码 301 302 304 403 301 永久重定向,浏览器会把重定向后的地址缓存起来,将来用户再次访问原始地址时,直接引导用户访问新地址 302 临时重定向,浏览器会引导用户进入新地址,但不会缓存原始地址&#xff0c…...

分布式 - 服务器Nginx:一小时入门系列之静态网页配置

文章目录 1. 静态文件配置2. nginx listen 命令解析3. nginx server_name 命令解析4. nginx server 端口重复5. nginx location 命令 1. 静态文件配置 在 /home 文件下配置一个静态的AdminLTE后台管理系统: [rootnginx-dev conf.d]# cd /home [rootnginx-dev home…...

kubernetes网络之网络策略-----Network Policies - Example

创建一个Deployment并配置Service 创建一个 nginx Deployment 用于演示 Kubernetes 的 NetworkPolicy: kubectl create deployment nginx --imagenginx 输出结果 deployment.apps/nginx created通过Service暴露该Deployment kubectl expose deployment nginx --po…...

【GDI/GDI+】如何抓取屏幕保存到bitmap文件?

问题 如何抓取屏幕保存到bitmap文件? 方法 GDI 方法 1、抓取。 HBITMAP CRectChartUI::GetBitmap(HDC hDC) {HDC hMemDC;int x, y;int nWidth, nHeight;HBITMAP hBitmap, hOldBitmap;hMemDC CreateCompatibleDC(hDC);nWidth GetDeviceCaps(hDC, HORZRES);nHei…...

HDFS介绍

目录 ​编辑 一、HDFS基础 1.1 概述 1.2 HDFS的设计目标 1.2.1 硬件故障 1.2.2 流式数据访问 1.2.3 超大数据集 1.2.4 简单的一致性模型 1.2.5 移动计算而不是移动数据 1.2.6 跨异构硬件和软件平台的可移植性 1.3 基础概念 1.3.1 块(Block) 1.3.2 复制…...

每日一题——两数之和

题目 给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。 (注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到&#xff0…...

Maven: ‘mvn‘ is not recognized as an internal or external command

下载并配置好Maven之后,CMD测试安装是否成功:mvn -v 提示: mvn is not recognized as an internal or external command, operable program or batch file. 检查环境变量: MAVEN_HOME: %MAVEN_HOME%\bin: 看上去没问题&#x…...

CubeSLAM: Monocular 3D Object SLAM——论文简述

一、简介 提出一种在动态和静态环境中同时进行3D目标检测和定位建图的方法,并且能够互相提升准确度。具体地,对于3D目标,其位置、方向和尺寸通过slam进行了优化;而3D目标作为slam中的路标,可以提供额外的语义和几何约…...

【雕爷学编程】MicroPython动手做(30)——物联网之Blynk 2

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…...

linux scp 拷贝文件到目标linux系统

scp -P 8866 -r jsonrpc/ root192.168.6.66:/folder_path...

Oracle-expdp报错ORA-39077、06502(Bug-16928674)

问题: 用户在使用expdp进程导出时,出现队列报错ORA-39077、ORA-06502 ORA-31626: job does not exist ORA-31638: cannot attach to job SYS_EXPORT_SCHEMA_01 for user SYS ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95 ORA-06512: at "SYS.KUPV$…...

Kafka入门,保姆级教学

文章目录 Kafka概念消息中间件对比消息中间件对比-选择建议Kafka常用名词介绍Kafka入门1. Kafka安装配置2.Kafka生产者与消费者关系3.Kafka依赖4.生产者发消息5.消费者接受消息6.Kafka高可用性设计6.1集群Kafka备份机制(Reolication) 7.kafka生产者详解7.1 发送类型7.2参数详解…...

RabbitMQ 过期时间(TTL)

TTL,Time to Live的简称,即过期时间,RabbitMQ可以对消息和队列设置TTL。 RabbitMQ支持设置队列的过期时间和消息的过期时间。如果设置队列的过期时间则队列中所有的消息都有相同的过期时间。如果设置消息的过期时间则每条消息的过期时间则可以不同。如两…...

C 语言练习题、持续更新

文章目录 C语言练习题读懂每个练习题才是学好一门代码的重要经历目录(先不要看答案,首先自己做才能更好的领悟,做不来没关系)题目一:有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数&…...

Android Q以上后台启动Activity初步尝试

在Android Q以后 google不允许在后台service 广播等等启动Activity 具体请看google文档从后台启动 Activity 的限制 | Android 开发者 | Android Developers 文档里有详细的说明,在哪种情况下可以后台启动Activity。 大体分为以下几种情况: 1、应用具有可见窗口,例如前…...

【torchlars】windows下载github中的torchlars包遇到的问题及解决方案

环境 python3.7 windows10 cuda11.1 pytorch1.8.1 虚拟环境miniconda 目的 windows下载github中的torchlars包 遇到的问题 问题一:直接下载好文件夹输入指令:python setup.py install 出现错误:RuntimeError: Error compiling objects f…...

SolidUI社区-通用Prompt技巧

背景 随着文本生成图像的语言模型兴起,SolidUI想帮人们快速构建可视化工具,可视化内容包括2D,3D,3D场景,从而快速构三维数据演示场景。SolidUI 是一个创新的项目,旨在将自然语言处理(NLP)与计算机图形学相…...

C++中类的封装写出一个文件加密的小项目

文件的加密较为简单&#xff0c;当然也可以修改它的加密方式等&#xff0c;供大家参考 #include<string> #include<fstream> class ReaderFile { public:string Read(const string& filename){cout << "读取文件&#xff0c;获取明文"<<…...

【网络编程·传输层】UDP和TCP的报头

目录 一、端口号划分 二、部分指令 1、pidof&#xff08;用于查看进程id&#xff09; 2、netstat&#xff08;查看网络状态&#xff09; 三、UDP协议 1、UDP协议格式 2、UDP协议如何进行封装、解包、分用 2.1封装、解包 2.2分用 3、UDP协议的特点 3.1UDP协议的特点 …...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...