消息队列的选型

news2024/9/22 5:32:43

目录

消息队列的比较:

 kafka的架构:

kafka为什么可以做到这么高的吞吐量:

kafka分区类型:

请看下篇文章:生产者 ACK的配置


消息队列的比较:

消息队列的产品有很多中比如:React MQ 、Kafka等。

为什么选择Kafka作为消息队列来处理数据,当时我们组也是做了大量的调研;我们当时调研考虑的主要是指标吞吐量这一块,因为大数据流式处理对数据的吞吐量要求是非常高的,在这快React MQ是比较厉害的。吞吐量可以达到1万多每秒,通过后来的调研发现kafka的吞吐量比React MQ更高,如果使用恰当的话吞吐量甚至可以达到10万+没秒。

 kafka的架构:

 Kafka的架构主要包含生产者、Broker和消费者,其中Broker是集群的,一个Broker可以包含多个Topic,Topic里边主要是来存储数据的同时包含多个Partition ,用来增加数据传输的并发度,Broker和消费者信息都存储在Zookeeper上边。

kafka为什么可以做到这么高的吞吐量:

首先从生产者说起,生产者发送数据是按照批进行发送的并不是一条一条发送的,从这里就已经可以保证kafka一个比较高的吞吐量了。生产者来一条消息以后会进入一个拦截器,在拦截器里边可以对数据进行一个整体的修改操作,一般这里是不做特殊的处理的,数据从拦截器出来以后就会进入到序列化器,在序列化器里边将数据转换成一个二进制流的形式放入Broker里边。

kafka分区类型:

经过序列化器以后数据就会走到分区器,Kafka使用的分区器是一个叫做Hash的分区器,Hash分区器我们可以对其进行重写。分区的方式有很多种,简单来说可以分为以下几类:

        1、数据带有Key:分区器会根据Key计算Hash然后根据计算后的Hasf来决定数据最终去往那个分区。

        2、数据带有分区号:如果数据带有分区号的话会直接进入对应的分区里面。

        3、这里还有一个累加器的东西,这个累加器相当于是一个缓冲区,这个缓冲区其实是一个HashMap其中Key是Topic加分区号的形式,Value是一个双端队列。

所以这里会使用双端队列原因是因为消息发送失败的时候会有一个重试的机制,如果消息没有发送成功会再次放入双端队列中之后会被再次发送,其次还有一个Send线程来管理每个区的大小,因为生产者底层是按照批次来进行数据发送的,这里面的感觉,就是像是一个轮询,但是这样描述也不是特别的准确。

首先它在向双端队列方数据的时候会先做一下判断(判断这个数据是否已经达到这个批次)如果达到了这个就会通过Send线程就会讲这批数据发出去,反之则继续等待;还有一种情况是按照时间来操作的,如果消息达到一定的时间以后回去检查一下有没有达到这个发送的批次阈值。

生产者将数据发送到Broker的过程可能会出现消息的重复或者丢失的情况,这个主要是靠ACK的配置来决定的。

请看下篇文章:生产者 ACK的配置

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文速学数模-季节性时序预测SARIMA模型详解+Python实现

目录 前言 一、季节时间序列模型概述 二、SARIMA模型定义 三.SARIMA模型算法原理 1.季节差分:消除季节单位根 2.ARIMA模型 1.自回归(AR) 2.差分(I) 3.移动平均(MA) 4.ARIMA 四.SARIMA模型Python实现 1.数据预处理 季节性分析 ADF检验 序列平稳化 2.模…

C语言学习分享(第四次)------分支和循环语句

分支和循环语句 1. 前言2. 什么是语句?3. 分支语句(选择结构)3.1 if语句3.11 代码块{}的作用3.12 悬空else3.13 练习 3.2 switch语句3.21 在switch语句中的 break3.22 switch语句中的default子句3.23 练习 4. 循环语句4.1 while循环4.11 while循环中的break4.12 while循环中的…

DNS服务器配置与使用【CentOS】

从本质上说,DNS是一个分布数据库,是一个树形结构(不是网状)——层次结构 DNS查找过程就是 回溯的过程(递归、迭代) www.xxx.edu.cn(属于四层结构) 查询DNS:域名到IP地址的…

Mysql 学习(五)InnDB 存储引擎-B+树索引的使用

基础知识 了解了表索引的底层是B树结构,我们也要学会如何将这个结构的优势发挥出来,我们先来回顾上一节的重点,也就是总结一下B树的特点索引对应的是一棵B树,而B树对应的很多层,每一层存储的数据对应的是下一层节点的…

使用VS2022打包C#项目生成setup文件并部署

首先安装工具 新建Setup项目 先将\bin\Debug下的生成文件添加到里面 添加文件夹将我们需要的文件放入 添加项目输出 在用户桌面添加快捷方式 简单的安装 其实右键项目》生成,然后就在debug这个目录下 下一步下一步就可以了 安装好桌面就有了 添加卸载…

如何把较大的word文档压缩变小,3个高效处理法

在日常工作和学习中,我们经常使用word文档来创建和编辑文件。由于Word文档提供了创建专业和精美文档的便捷工具,并且能够节省用户大量的时间,因此是用户使用频率最高的文字处理程序之一。然而,一些较大的Word文档会占用大量存储空…

【JAVA程序设计】(C00129)基于Springboot+Vue前后端分离的在线考试管理系统

基于SpringbootVue前后端分离的在线考试管理系统 项目简介项目获取开发环境项目技术运行截图 项目简介 基于Springbootvue开发的前后端分离的学生考试系统为三个角色:系统管理员、教师、学生 管理员角色包含以下功能: 题库管理、试题管理、考试管理、阅…

太阳能电池IV测试软件的主要功能,太阳能电池特性测试

太阳能电池测试软件是一种专门用于测试太阳能电池的软件。太阳能电池是一种能够将太阳能转化为电能的装置,它的性能直接影响到太阳能电池发电系统的效率和稳定性。因此,太阳能电池测试软件的开发和使用对于太阳能电池行业的发展具有非常重要的意义。 一、…

[ARM+Linux] 基于全志h616外设开发笔记

修改用户密码 配置网络 nmcli dev wifi 命令扫描周围WIFI热点 nmcli dev wifi connect xxx password xxx 命令连接WiFi 查看ip地址的指令: ifconfig ip addr show wlan0 SSH登录 这是企业开发调试必用方式,比串口来说不用接线,前提是接入网络…

手把手带你了解《线程池》

文章目录 线程池的概念池的目的线程池的优势为什么从池子里拿线程更高效?构造方法参数讲解线程拒绝策略模拟实现线程池一个线程池设置多少线程合适? 线程池的概念 线程池:提前把线程准备好,创建线程不是直接从系统申请&#xff0…

【linux】——日志分析

文章目录 1. 日志文件1.1 日志文件的分类1.2 日志文件保存位置1.2.1 内核及系统日志1.2.2 日志消息的级别1.2.3 日志记录的一般格式1.2.4 用户日志分析 程序日志分析日志管理策略 远程收集日志 1. 日志文件 1.1 日志文件的分类 ● 日志文件是用于记录Linux系统中各种运行消息的…

Flutter PC桌面端 控制应用尺寸是否允许放大缩小

一、需求 桌面端中,登录、注册、找回密码页面不允许用户手动放大缩小,主页面允许 二、插件 window_manager 使用教程请参照这篇博客:Flutter桌面端开发——window_manager插件的使用 题外话: 之前使用的是bitsdojo_window插件…

202303-第四周-山川软件产品资讯

山川软件愿为您提供最优质的服务。 您的每一个疑问都会被认真对待,您的每一个建议都将都会仔细思考。 我们希望人人都能分析大数据,人人都能搭建应用。 因此我们将不断完善DEMO、文档、以及视频,期望能在最大程度上快速帮助用户快速解决问…

3、Typescript中补充的六个类型

1、元组 元组可以看做是数组的拓展,它表示已知元素数量和类型的数组。确切地说,是已知数组中每一个位置上的元素的 类型,来看例子: let tuple: [string, number, boolean]; tuple ["a", 2, false]; tuple [2, "…

FPGA | 延迟模型

实际逻辑元器件和它们之间的传输路径都会存在延迟。因此,必须检查设计中的延迟是否满足实际电路的时序约束要求。可以用时序仿真的方法来检查时序(timing),即在仿真时向元件或路径中加入和实际相符的延迟信息,并进行相…

4.34、组播(多播)

4.34、多播 1.组播(多播)的介绍①组播地址②如何设置组播(组播的使用) 2.代码编写①服务端②客户端 1.组播(多播)的介绍 单播地址标识单个 IP 接口,广播地址标识某个子网的所有 IP 接口,多播地址标识一组 IP 接口。单播和广播是寻…

ThreadPoolExecutor原理剖析

1.前言 1.1 为什么要使用线程池? 线程池主要为了解决两个问题 一是当执行大量异步任务时,线程池能够提供较好的性能,避免了重复创建和销毁线程带来的开销二是线程池提供了一种资源限制和管理的手段,比如限制线程个数&#xff0…

【蓝桥杯】最难算法没有之一· 动态规划真的这么好理解?(引入)

欢迎回到:遇见蓝桥遇见你,不负代码不负卿! 目录 一、何为动态规划DP 二、记忆化搜索 典例1.斐波那契数列 方法一:暴力递归 方法二:记忆化搜索 变形题 典例2:爬楼梯(青蛙跳台阶&#xf…

海睿思分享 | 低而不LOW的低代码开发

低代码(Low-Code) 是指输出最少的代码,快速完成软件系统开发,进而实现降低开发成本的成效。 Low-Code 中的“Low”与网络热词“LOW”同音同字,前者通常理解为低成本或少量的代码输出,后者是对低认知已见问…

【数据结构】数据结构小试牛刀之单链表

【数据结构】数据结构小试牛刀之单链表 一、目标二、实现1、初始化工作2、单链表的尾插2.1、图解原理2.2、代码实现解答一个疑问 3、单链表的尾删3.1、图解原理3.2、代码实现 4、打印单链表5、单链表的头插5.1、图解原理5.2、代码实现 6、单链表的头删6.1、图解原理6.2、代码实…