当前位置: 首页 > 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…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

JVM 内存结构 详解

内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: ​ 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...

书籍“之“字形打印矩阵(8)0609

题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...

「Java基本语法」变量的使用

变量定义 变量是程序中存储数据的容器&#xff0c;用于保存可变的数据值。在Java中&#xff0c;变量必须先声明后使用&#xff0c;声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例&#xff1a;声明与初始化 public class VariableDemo {publi…...