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

Kafka使用总结

1、Kafka是何如做到高性能的?

a、消息批处理减少网络通信开销,提升系统吞吐能力(先攒一波,消息以“批”为单位进行处理)

生产端:无论是同步发送还是异步发送,Kafka都不会立即就把这条消息发送出去。而是先把这条消息存放在内存中缓存起来,然后选择合适的时机把缓存中的所有消息成批的一次性发给Broker

Broker:整个处理流程中,无论是写入磁盘、从磁盘读出来、还是复制到其他副本,批消息都不会被解开,一直是作为一条“批消息”来进行处理

消费端:消息同样以批为单位进行传递,Consumer 从 Broker拉到一批消息后,在客户端进行批消息解开,再一条一条交给用户代码处理

构建批消息和解开批消息分别在发送端和消费端的客户端完成,不仅减轻了 Broker 的压力,最重要的是减少了 Broker 处理请求的次数,提升了总体的处理能力。

b、顺序读写减少寻址次数,提升磁盘 IO 性能 

        基于磁盘文件高性能顺序读写的特性来设计的存储结构 ,顺序读写相比于随机读写省去了很多寻址时间,它只要寻址一次,就可以连续地进行读写,所以性能要比随机读写要好很多(固态硬盘顺序读写的性能比随机读写快几倍、机械硬盘差距会达到几十倍)

c、利用PageCache 加速消息读写,减少 IO开销

        程序在调用系统的API进行读写文件时,实际操作的都是 PageCache(文件在内存中缓存的副本)并不会直接去读写磁盘上的文件,大部分情况下,消费读消息都会命中 PageCache,一个是读取的速度会非常快,另外一个是,给写入消息让出磁盘的 IO 资源,间接也提升了写入的性能。

        根据局部性原理,通常刚被访问的数据在短时间内再次被访问的概率很高,PageCache用来缓存最近被访问的数据,当空间不足时淘汰最久未被访问的缓存,所以读磁盘数据的时,优先在 PageCache查找,如果数据存在则可以直接返回;如果没有再从磁盘中读取,然后缓存PageCache中(消息队列的场景一般都是发送即接收,PageCache利用率很高

        缺点:在传输大文件(GB 级别的文件)时,PageCache会不起作用,浪费一次数据拷贝,造成性能下降,即使使用了 PageCache 的零拷贝也会损失性能 


        PageCache(磁盘高速缓存):操作系统在内存中给磁盘上文件建立的缓存

d、使用零拷贝(ZeroCopy)减少数据拷贝开销

borker中消息的消费流程:从文件中找到消息数据读到内存中;然后把消息通过网络发给客户端

  1. 从文件复制数据到 PageCache 中,如果命中 PageCache,可以省掉;
  2. 从 PageCache 复制到应用程序的内存空间中,也就是我们可以操作的对象所在的内存;
  3. 从应用程序的内存空间复制到 Socket 的缓冲区,这个过程就是我们调用网络应用框架的 API 发送数据的过程。

        Kafka 使用零拷贝技术可以把这个复制次数减少一次,上面的 2、3 步骤两次复制合并成一次复制。直接从 PageCache 中把数据复制到 Socket 缓冲区中,这样不仅减少一次数据复制,更重要的是,由于不用把数据复制到用户内存空间,DMA 控制器可以直接完成数据复制,不需要 CPU 参与,速度更快

扩展:在Unix-like操作系统中 mmap/sendfile 用于实现零拷贝

mmap:允许将一个文件映射到进程的地址空间中,使得文件的内容可以直接通过内存访问,而无需通过读取和写入系统调用。这样可以实现零拷贝,因为数据可以直接从文件映射的内存区域传输到网络或其他设备,而无需在用户空间和内核空间之间复制数据。在Java中,可以使用FileChannel的map()方法来实现内存映射。

sendfile:是一个系统调用,允许将一个文件的内容直接从内核空间传输到另一个文件描述符(通常是网络套接字)中,无需在用户空间和内核空间之间复制数据。这可以在发送文件时实现零拷贝,在Java中,可以使用FileChannel的transferTo()方法或transferFrom()方法来使用sendfile进行文件传输

e、其他

全异步化的线程模型、高性能的异步网络传输、自定义的私有传输协议的序列化、反序列化

2、kafka是如何实现复制的?

Kafka的复制基本单位是分区,每个分区的几个副本之间采用一主多从,构成一个小的复制集群,Broker 只是这些分区副本的容器。

Kafka 写入消息时采用的是异步复制方式,消息写入主节点之后,并不马上返回写入成功,而是等待用户指定个数的副本节点都复制成功后再返回。

配置副本节点数:ISR(In Sync Replicas) 即:保持数据同步的副本 ;PS:ISR中是包含主节点的

如果所有的 ISR 节点都宕机了,分区就无法提供服务了。也可以选择配置成让分区继续提供服务,这样只要有一个节点还活着,就可以提供服务,代价是无法保证数据一致性,会丢消息。

高可用:Kafka 采用 ZooKeeper 监控每个分区的多个节点,如果发现某个分区的主节点宕机了,会通过 ZooKeeper 选举方式选出一个新的主节点,选举时会从所有 ISR 节点中来选新的主节点,这样可以保证数据一致性。

相关文章:

Kafka使用总结

1、Kafka是何如做到高性能的? a、消息批处理减少网络通信开销,提升系统吞吐能力(先攒一波,消息以“批”为单位进行处理) 生产端:无论是同步发送还是异步发送,Kafka都不会立即就把这条消息发送出…...

2023 年山东省职业院校技能大赛(高等职业教育) “信息安全管理与评估”样题

2023 年山东省职业院校技能大赛(高等职业教育) “信息安全管理与评估”样题 目录 任务 1 网络平台搭建(50 分) 任务 2 网络安全设备配置与防护(250 分) 模块二 网络安全事件响应、数字取证调查、应用程序安…...

Apache Web 服务器监控工具

将Apache Web 服务器监控纳入 IT 基础架构管理策略有助于先发制人地识别性能瓶颈,这种主动监控方法提供必要的数据,以确保 Web 服务器能够胜任任务,并在需要时进行优化。保证客户获得流畅、无忧的用户体验可以大大有助于巩固他们对组织的信任…...

MySQL执行语句 Table ‘mysql.servers‘ doesn‘t exist

执行语句报错: mysql> flush privileges; ERROR 1146 (42S02): Table mysql.servers doesnt exist解决: 进入数据库 删除servers表 mysql> use mysql Database changed mysql> drop table if exists servers; Query OK, 0 rows affected, …...

在datagridview列显示下拉操作

DataGridViewComboBoxExColumn 设定好类型 需要设置的地方是: 绑定数据的操作: 因为此处绑定数据实际为数据 参数 显示的操作,不影响datasource的数据绑定 下一步 数据绑定: DGVCOrderZhuangtai.ValueType typeof(EOrderZhuan…...

基于人工智能 RL 算法的边缘服务器智能选择 模式研究

提出了一种基于人工智能深度强化学习算法的扩展性及智能性较高的智能选择模式。在人工智能深度强化学习 算法的基础上,引入了动作抑制、四重 Q 学习 (QQL) 及归一化 Q-value 等机制,研究并实现了在满足业务延迟要求及公平 性的原则下,物联终端…...

JavaScript流程控制语句

代码块: JS中,可以通过代码块来为代码进行分组, 在同一个代码块中的代码就属于一组代码 这组代码要么全都执行,要么都不执行 JS的代码块比较奇葩。 通常情况下,代码块对于外部来说应该是隔离的, 在代…...

01.Git分布式版本控制工具

一、Git简介 Git是一个开源的分布式版本控制系统,可以有效、高速地进行从很小到非常大的项目的版本管理。 Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 二、版本控制器方式 1.集中式版本控制工具 版本库放在中央服务器中&…...

Hudi介绍

在数据不断写入 Hudi 期间,Hudi 会不断生成 commit、deltacommit、clean 等 Instant 记录每一次操作类型、状态及详细的元数据,这些 Instant 最终都会存到 .hoodie 元数据目录下,为了避免元数据文件数量过多,ActiveTimeline 越来越…...

MYSQl基础操作命令合集与详解

MySQL入门 先来个总结 SQL语言分类 DDL(Data Definition Language) - 数据定义语言: 用于定义和管理数据库结构,包括创建、修改和删除数据库对象。 示例:CREATE, ALTER, DROP等语句。 DML(Data Manipulation Lan…...

【Flink名称解释一】什么是cataLog

Catalog 提供了元数据信息,例如数据库、表、分区、视图以及数据库或其他外部系统中存储的函数和信息。 数据处理最关键的方面之一是管理元数据。 元数据可以是临时的,例如临时表、或者通过 TableEnvironment 注册的 UDF。 元数据也可以是持久化的&#x…...

ES如何提高准确率之【term-centric】

提高准确率的方法有很多,但是要在提高准确率的同时保证召回率往往比较困难,本文只介绍一种比较常见的情况。 问题场景 我们经常搜索内容,往往不止针对某个字段进行搜索,比如:标题、内容,往往都是一起搜索…...

DDD落地:爱奇艺打赏服务,如何DDD架构?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 谈谈你的DDD落地经验? 谈谈你对DDD的理解&#x…...

基于JavaWeb+SSM+Vue居住证申报系统小程序的设计和实现

基于JavaWebSSMVue居住证申报系统小程序的设计和实现 源码获取入口KaiTi 报告Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 KaiTi 报告 1.1题目背景 随着时代的发展,人口流动越来越频繁&#xff0…...

环境安全之配置管理及配置安全设置指导

一、前言 IT运维过程中,配置的变更和管理是一件非常重要且必要的事,除了一般宏观层面的配置管理,还有应用配置参数的配置优化,本文手机整理常用应用组件配置项配置,尤其安全层面,以提供安全加固指导实践。…...

【C#】Microsoft C# 视频学习总结

一、文档链接 C# 文档 - 入门、教程、参考。| Microsoft Learn 二、基础学习 1、输出语法 Console.WriteLine() using System; namespace HelloWorldApplication {class HelloWorld{static void Main(string[] args){Console.WriteLine("Hello World!");}} }Hel…...

【已解决-实操篇】SaTokenException: 非Web上下文无法获取Request问题解决-实操篇

在上一篇《【理论篇】SaTokenException: 非Web上下文无法获取Request问题解决 -理论篇》中,凯哥(公众号:凯哥Java)介绍了了产生这个问题的源码在哪里,以及怎么解决的方案。没有给出实际操作步骤。 本文,凯哥就通过threadLocal方案…...

论文润色机构哪个好 快码论文

大家好,今天来聊聊论文润色机构哪个好,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 标题:论文润色机构哪个好――专业、高效、可靠的学术支持 一…...

Idea执行bat使用maven打包springboot项目成docker镜像并push到Harbor

如果执行以下命令失败,先把mvn的-q参数去掉,让错误输出到控制台。 《idea配置优化、Maven配置镜像、并行构建加速打包、解决maven打包时偶尔几个文件没权限的问题》下面的使用company-repo私有仓库和阿里云镜像仓库同时使用的配置参考。 bat echo off …...

NCNN 源码学习【三】:数据处理

一、Topic:数据处理 这次我们来一段NCNN应用代码中,除了推理外最重要的一部分代码,数据处理: ncnn::Mat in ncnn::Mat::from_pixels_resize(bgr.data, ncnn::Mat::PIXEL_BGR, bgr.cols, bgr.rows, 227, 227);const float mean_v…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...