Kafka 配置参数性能调优建议
文章目录
- 1、生产者调优
- batch.size(重要)
- linger.ms
- compression.type
- acks(重要)
- buffer.memory
- max.in.flight.requests.per.connection(重要)
- message.max.bytes(重要)
- 2、消费者调优
- fetch.min.bytes(重要)
- fetch.max.wait.ms(重要)
- max.poll.records(重要)
- auto.offset.reset(重要)
- session.timeout.ms
- heartbeat.interval.ms
- 3、Broker 调优
- num.network.threads
- num.io.threads
- log.flush.interval.messages(重要)
- log.flush.interval.ms(重要)
- num.replica.fetchers
- auto.create.topics.enable
- unclean.leader.election.enable
- log.retention.hours
1、生产者调优
batch.size(重要)
建议:64KB ~ 1MB
batch.size
指的是生产者在将消息发送到 Broker 之前,会将多条消息收集到一个批次进行发送。
增大batch.size
可以显著减少网络请求次数,因为每次发送更多的消息,从而提高了网络传输的效率,有助于提升整体的吞吐量。
但是batch.size
调整过大,也会带来一定的延迟,因为生产者需要等待更多的消息填满批次,如果批次一直无法填满,消息就会在生产者端停留更长时间,直到达到其他触发发送的条件。在高吞吐量且对延迟要求不是特别苛刻的场景,可以适当增大该值。
linger.ms
建议:10 ~ 100ms
linger.ms
是生产者等待batch.size
填满的时间。
当设置该值后,即使没有填满,只要到了等待时间 linger.ms
值,生产者也会将当前批次的消息发送出去。
增大 linger.ms
可以让生产者有更多的时间去收集消息,从而形成更大的批次,提升吞吐量。这样消息在生产者端等待的时间会变长,会增加消息的延迟。在一些允许一定延迟的批量数据处理场景中,可以适当增大该值来提高吞吐量。
compression.type
建议:snappy 或 lz4
用于减少生产者发送到 Broker 的数据量。使用compression.type
可以将消息进行压缩后再传输,这样可以有效节省网络带宽,提高网络传输效率。
snappy
压缩算法的特点是压缩和解压缩速度快,对 CPU 资源的消耗相对较低,适用于对压缩和解压缩速度要求较高的场景;lz4
同样具有较高的压缩和解压缩速度,并且在压缩比上可能比 snappy
稍好一些。使用压缩算法本质上是用 CPU 换取带宽,在网络带宽有限的情况下非常有用。
acks(重要)
建议:1 或 all
acks
参数控制了生产者在发送消息后需要收到多少确认才认为消息发送成功。
当 acks = 1
时,只要 Leader 副本
确认接收到消息,生产者就会收到响应,这种方式在保证一定可靠性的同时,具有较高的吞吐量。
当 acks = all
时,生产者需要等待所有的 ISR(In-Sync Replicas)
副本都确认接收到消息才会收到响应,这提供了最高的可靠性,但会略微降低吞吐量,因为需要等待更多的确认信息。在对消息可靠性要求极高的场景下,如金融交易数据的传输,建议使用 acks = all。
buffer.memory
默认:32MB
建议:32 ~ 64MB
buffer.memory
用于暂存生产者未发送到 Broker 的消息。
当生产者发送消息的速度超过了 Broker 接收的速度时,消息会被存储在buffer.memory
中。
如果缓冲区设置过小,可能会导致缓冲区很快被填满,从而使生产者阻塞,影响消息的发送效率。适当增大缓冲区大小可以避免因缓冲区满导致的阻塞问题,但也不能设置过大,否则会占用过多的系统内存资源。
max.in.flight.requests.per.connection(重要)
建议:1(性能差、顺序强一致)、n(高性能、但可能乱序)
max.in.flight.requests.per.connection
限制了单个连接上允许的最大未确认请求数。生产者可以在一个连接上同时发送多个请求而无需等待每个请求的响应。
如果将该值设置得过高,可能会导致消息的顺序被破坏。例如:当一个请求失败并重试时,后续已经发送的请求可能会先到达 Broker,从而导致消息的顺序不一致。需要根据实际情况合理设置该值,以平衡吞吐量和消息顺序性。
message.max.bytes(重要)
建议:小于128KB
生产者能够发送的最大消息大小。
设置合适的 message.max.bytes
可以确保生产者发送的消息不会超出 Broker 和消费者的处理能力。如果设置得过大,可能会导致 Broker 和消费者的内存压力增大,处理效率降低;如果设置得过小,可能无法满足某些业务场景下大消息的传输需求。需要根据实际业务中的消息大小分布来合理调整该值。
2、消费者调优
fetch.min.bytes(重要)
建议:1MB - 10MB
消费者在单次拉取数据时,从 Broker 获得的最小数据量。
通过设置一个较大的值,可以减少消费者向 Broker 发送拉取请求的频率,因为只有当 Broker 上有足够的数据满足 fetch.min.bytes
的要求时,才会将数据返回给消费者。这样可以降低网络开销,提高整体的性能。但如果设置得过大,可能会导致消费者等待时间过长,影响实时性。
fetch.max.wait.ms(重要)
建议:500ms
消费者等待 fetch.min.bytes
数据量的超时时间。
当消费者向 Broker 发送拉取请求后,如果在 fetch.max.wait.ms
时间内,Broker 上的数据量仍然没有达到 fetch.min.bytes
的要求,Broker 也会将当前可用的数据返回给消费者。
该参数用于平衡延迟和吞吐量。设置得较短,消费者可能会频繁地拉取少量数据,增加网络开销;设置得较长,可能会导致消息处理的延迟增加。
max.poll.records(重要)
建议:500 - 5000
该参数限制了消费者单次拉取的最大消息数。合理设置该值可以避免消费者处理消息时出现阻塞的情况。
设置得过大,消费者可能会一次性拉取过多的消息,导致处理这些消息的时间过长,从而影响后续消息的拉取和处理;设置得过小,消费者需要频繁地向 Broker 发送拉取请求,增加了网络开销。需要根据消费者的处理能力和 Broker 的负载情况来调整该值。
auto.offset.reset(重要)
建议:earliest
该参数决定了在消费者没有有效的偏移量时(例如,新的消费者组或者偏移量已经过期),从何处开始消费消息。当设置为 latest
时,消费者将从最新的消息开始消费,即只消费后续产生的新消息;
当设置为 earliest
时,消费者将从分区的最早消息开始消费。在需要处理历史数据的场景中,可以选择 earliest
;而在只关注最新数据的场景下,选择 latest
更为合适(会丢数据)。
session.timeout.ms
建议:10s - 30s
消费者会定期向协调者发送心跳信息,以表明自己处于活跃状态。如果在 session.timeout.ms
时间内,协调者没有收到消费者的心跳信息,就会认为该消费者已经失效,并将其从消费者组中剔除。
如果该值设置得过短,可能会因为网络抖动等原因导致消费者被误剔除;如果设置得过长,当消费者真正出现故障时,协调者不能及时发现并重新分配分区,会影响整个消费者组的性能。
heartbeat.interval.ms
建议:1/3 * session.timeout.ms
指定消费者向协调者发送心跳的时间间隔。
心跳机制用于维持消费者与协调者之间的连接,确保协调者知道消费者处于活跃状态。通常建议将其设置为 session.timeout.ms
的三分之一,这样可以在保证及时检测到消费者故障的同时,避免过于频繁的心跳请求增加网络开销。
3、Broker 调优
num.network.threads
建议:CPU 核心数 × 3
指定 Broker 用于处理网络请求的线程数。
在高并发场景下,大量的生产者和消费者会同时向 Broker 发送网络请求,如果处理网络请求的线程数不足,会导致请求处理不及时,影响系统的性能。
通过将该值设置为 CPU 核心数的 3 倍可以充分利用 CPU 资源,提高网络请求的处理能力。但具体的值还需要根据实际的并发情况和系统资源进行调整。
num.io.threads
建议:CPU 核心数 × 8
用于处理磁盘 I/O 的线程数。
Kafka 的消息存储依赖于磁盘 I/O,因此磁盘 I/O 的性能对系统的整体性能有很大影响。增加处理磁盘 I/O 的线程数可以提高磁盘 I/O 的并发能力,加快消息的读写速度。
但需要注意的是,该值需要根据磁盘的性能进行调整,如果磁盘的性能较差,过多的线程可能会导致磁盘竞争加剧,反而降低性能。
log.flush.interval.messages(重要)
建议:1(立即刷盘,性能差)、n (批量刷盘,性能好,会丢数据)
指定将消息刷写到磁盘之前,需要累积的消息数。
增大该值可以减少磁盘 I/O 次数,因为每次刷盘会将更多的消息一次性写入磁盘,从而提高磁盘的写入效率。但这也会牺牲部分持久性,因为如果在消息累积过程中 Broker 发生故障,可能会导致部分未刷盘的消息丢失。需要根据业务对数据持久性的要求来合理设置该值。
log.flush.interval.ms(重要)
建议:1000 - 5000ms
强制刷盘的时间间隔,与 log.flush.interval.messages
配合使用。
即使消息数量没有达到 log.flush.interval.messages
的要求,只要时间达到 log.flush.interval.ms
,也会将当前的消息刷写到磁盘。通过设置合理的刷盘间隔,可以在保证一定磁盘 I/O 效率的同时,提高数据的持久性。
num.replica.fetchers
建议:2 - 4
指定 Broker 用于副本同步的线程数。
副本同步是 Kafka 保证数据可靠性的重要机制,增加副本同步线程数可以提升副本同步的速度,减少副本之间的延迟。但过多的线程可能会占用过多的系统资源,因此需要根据实际情况进行调整。
auto.create.topics.enable
建议:false
在生产环境中,建议禁用自动创建 Topic 的功能。
如果启用该功能,当生产者或消费者尝试访问一个不存在的 Topic 时,Kafka 会自动创建该 Topic。这可能会导致生产环境中产生大量不必要的 Topic,增加系统的管理成本和资源消耗。
为了避免这种情况的发生,应该手动创建所需的 Topic,并将 auto.create.topics.enable
设置为 false
。
unclean.leader.election.enable
建议:false
禁止非 ISR 副本成为 Leader 可以确保数据的一致性。
当 Leader 副本失效时,如果启用了 unclean.leader.election.enable
,非 ISR 副本可能会被选举为新的 Leader。由于非 ISR 副本可能落后于其他副本,成为 Leader 后可能会导致数据丢失或不一致。为了保证数据的一致性,建议将该参数设置为 false
。
log.retention.hours
建议:72小时
该参数指定了 Kafka 消息在磁盘上的保留时间。
根据存储容量和业务需求,可以调整该值。如果存储容量充足,且业务需要长期保留数据,可以适当增大该值;如果存储容量有限,或者业务只需要短期的数据,可以减小该值。
相关文章:
Kafka 配置参数性能调优建议
文章目录 1、生产者调优batch.size(重要)linger.mscompression.typeacks(重要)buffer.memorymax.in.flight.requests.per.connection(重要)message.max.bytes(重要) 2、消费者调优fe…...
Java读Excel:解析阿里云easyExcel导入文件的行号
文章目录 引言I 解析阿里云easyExcel导入文件的行号声明解析对象的基类判断Excel解析对象类型是否包含继承某个类 isAssignableFromJava 转换list类型并设置下标到元素对象属性II 封装excel 文件读取excel 文件读取用法文件导入上下文III 参数校验工具类校验参数是否合法 (jaka…...
Vuex持续保存数据 页面刷新不丢失 vuex-persistedstate
vuex可以进行全局的状态管理,但刷新后刷新后数据会消失,这是我们不愿意看到的。怎么解决呢,我们可以结合本地存储做到数据状态持久化,但是太麻烦每次都要操作,强烈建议使用插件利用vuex-persistedstate插件. 安装 npm …...
.NET8配置组件
一、组件的概念 含义:用于从配置文件中读取配置的组件,叫做配置组件。简单来说, 就是从xml、json、yaml、txt等文件中读取配置的组件。主要采用微软提供的 Microsoft.Extensions.Configuration 二、组件的使用 1、json配置读取 (1)、在Dunk.Common.Project.Configuratio…...
加密算法:ed25519和RSA
ed25519 和 RSA 是两种不同的非对称加密算法,常用于 SSH 密钥认证。以下是它们的对比和选择建议: 1. 算法对比 特性ed25519RSA (4096-bit)安全性更高(基于椭圆曲线密码学 ECC)高(依赖大数分解难度)密钥长度固定 256 位(公钥/私钥更短)通常 2048/4096 位(公钥较大)性能…...
递归、搜索和回溯算法《递归》
在之前的优选算法当中我们已经学习了一些基本的算法,那么接下来我们就要来学习算法当中的一大重要章节——递归、搜索和回溯算法,其实也就是大家常常听到的dfs、bfs;其实本质就是递归,在学习搜索、回溯等算法的过程当中我们会先来…...
构建“云中”高并发:12306技术改造的系统性启示
作为曾参与12306余票查询系统高并发升级的技术从业者,笔者注意到公众对于12306底层技术常存在认知盲区。为破解这一迷思,特此分享十年前的架构解密文献(该技术之前名叫 gemfire 现已晋升为Apache顶级项目Geode,代码库详见…...
升级xcode15 报错Error (Xcode): Cycle inside Runner
升级xcode15后报错 Could not build the precompiled application for the device. Error (Xcode): Cycle inside Runner; building could produce unreliable results. This usually can be resolved by moving the shell script phase Thin Binary so that it runs before th…...
gradle-tasks.register(‘classesJar‘, Jar)解析
在使用gradle作为构建工具的android或者java web项目中,我们经常能遇到以下格式 tasks.register(classesJar, Jar) {from "$buildDir/intermediates/javac/release/classes" // 假设使用 release 构建变体 }artifact sourcesJar使用伪代码解释 class Cu…...
深度对比:Objective-C与Swift的RunTime机制与底层原理
1. RunTime简介 RunTime(运行时)是指程序在运行过程中动态管理类型、对象、方法等的机制。Objective-C 和 Swift 都拥有自己的运行时系统,但设计理念和实现方式有很大不同。理解 RunTime 的底层原理,是掌握 iOS 高级开发的关键。…...
升级Xcode16,flutter项目报错
升级xcode16后发现原来的项目运行不了了,flutter的版本是3.3.1 保错:[ 304 ms] Could not build the precompiled application for the device. [ 16 ms] Error (Xcode): linker command failed with exit code 1 (use -v to see invocation) 1、找到本地…...
MCU内存映射技术详解
MCU内存映射技术详解 1. 引言 内存映射是微控制器(MCU)系统设计中的核心概念,它决定了MCU如何访问和管理内存资源。通过内存映射,处理器可以将物理设备的地址空间映射到自己的逻辑地址空间中,实现对各种硬件资源的统一访问。本文将深入探讨…...
Mac搭建Flutter IOS环境详细指南
目录 1. 准备工作 2. 下载Flutter SDK: 2.1 配置环境 2.2 解决环境报错 zsh:command not found:flutter 2.3、再使用source命令重新加载一下:【source ~/.zshrc】,下次再编辑这个文件就可以直接执行:【open ~/.zshrc】 2.4、执行【flut…...
计算机基础—(九道题)
1. 流程控制题 编写一个程序,输入一个整数,判断它是否是素数(质数)。 如果是素数,输出Yes,否则输出No。 #include <stdio.h> int main() /* 1. 流程控制题编写一个程序,输入一个整数&…...
蓝桥杯2025年第十六届省赛真题-可分解的正整数
其实只有1不符合要求,因为-1010,作为对称结构,任何数都可以改成加法,比如4-3-2-101234,但因为最小连续的数为3,1恰好在里面,所以1不行。 #include<bits/stdc.h> using namespace std; #define int l…...
Linux虚拟机无法重启网络
这是为什么啊?试了很多种方法都还是失败。 这是本机vmware8的网络配置 这是linux虚拟机的nat配置 这是虚拟机里静态配置的网络 有没有可以答疑解惑一下的?...
8.Android(通过Manifest配置文件传递数据(meta-data))
配置文件 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"><applicationandroid:allowBackup"tr…...
17:00开始面试,17:08就出来了,问的问题有点变态。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到4月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...
Docker 常用命令(涵盖多个方面)
Docker 命令完整列表(表格形式) 类别 命令 描述 示例 Docker 服务管理 sudo systemctl start docker 启动 Docker 守护进程 sudo systemctl start docker sudo systemctl stop docker 停止 Docker 守护进程,需先停止所有容…...
前缀树(Trie)(字典树)
做leetcode的时候看到前缀树,听都没听过,后来才知道前缀树就是字典树。之前学过,在OJ项目中用字典树来实现黑白名单限制。浅浅复习一下吧 用字典树来实现黑白名单限制 实现步骤 (1)定义黑名单 import java.util.Arra…...
word插入APA格式的参考文献
word插入APA格式的参考文献并实现交叉引用 1. 直接手写并采用超链接 2. 使用zotero插入参考文献后采用超链接(前提下载zotero和对应的插件) 1. 直接手写 APA格式生成 1. 在需要插入参考文献的地方手写格式,如下。 2. 生成书签 名字随便填的,&#x…...
n8n部署docker本地化备份和数据持久化和迁移问题
问题总结: 在一开始的操作中,你遇到的主要问题是 Docker 容器内的文件权限导致了文件无法正确写入和修改,尤其是在复制本地备份文件到容器内时。具体问题表现为: 复制文件后,容器内文件权限错误:你使用 do…...
绘制板块层级图
目录 【实验目的】 【实验原理】 【实验环境】 【实验步骤】 【实验总结】 【实验目的】 掌握数据文件读取掌握数据处理的方法实现板块层级图的绘制 【实验原理】 板块层级图(treemap)是一种基于面积的可视化方式,通过每一个板块&…...
国标云台控制状态
1.基本概念 国标联网系统的信息传输、交换、控制方面的都是通过SIP服务器负责通讯得,SIP负责信令流逐级转发。其中最重要的一部分就是和摄像机进行信令交互。 像安全注册、实时视音频点播、历史视音频的回放等应用的会话控制采用IETFRFC3261规定的Register、Invite等…...
PostgreSQL与MySQL哪个适合做时空数据分析?
PostgreSQL与MySQL的定位与区别 定位差异:功能导向与性能优先 PostgreSQL和MySQL作为两大主流开源数据库,其核心设计理念和适用场景存在显著差异。PostgreSQL定位为 对象-关系型数据库(ORDBMS) ,强调功能完备性与标准…...
uniapp利用生命周期函数实现后台常驻示例
在 Uniapp 中,利用生命周期函数实现“后台常驻”主要是通过监听应用的前后台状态变化( onHide 和 onShow ),并结合 定时器、后台任务或状态保持逻辑 来实现。但需注意: 纯前端 JS 代码无法突破系统对后台应用的限制&am…...
JAVA设计模式——(八)单例模式
JAVA设计模式——(八)单例模式 介绍理解实现饿汉式懒汉式 应用 介绍 确保一个类只存在一个实例。 理解 就是一个实例,new出来的一个,很简单。不过单例模式分为了懒汉式和饿汉式,其中也有线程安全的实现方式和线程不…...
【亚马逊云】AWS Wavelength 从理论讲解到实验演练
一、什么是 AWS Wavelength? Wavelength——一种新型的 AWS 基础设施,旨在运行需要低延迟或边缘弹性的工作负载。 AWS Wavelength 将按需计算和存储服务引入通信服务提供商网络,使客户能够构建和部署满足其数据驻留、低延迟和弹性要求的应用…...
Uniapp:vite.config.js全局配置
目录 一、基本概述二、配置自动引入插件一、基本概述 vite.config.js 是一个可选的配置文件,如果项目的根目录中存在这个文件,那么它会被自动加载,一般用于配置 vite 的编译选项 二、配置自动引入插件 在项目命令行终端中执行如下代码 npm install unplugin-auto-import…...
Springboot整合阿里云腾讯云发送短信验证码 可随时切换短信运营商
本文描述了在springboot项目中整合实现对接阿里云 和 腾讯云的短信验证码发送,可通过更改配置文件达到切换短信发送运营商(申请签名、短信模版这些本文不在叙述)。 首先看下大体结构: 一、需要导入的jar <dependency><groupId>com.…...
git 查看用户信息
在 Git 中查看用户信息是一项常见的任务,可以帮助你确认当前仓库的配置或全局的 Git 配置是否正确设置。你可以通过多种方式来查看这些信息。 查看全局用户信息 全局用户信息是应用于所有 Git 仓库的默认设置。要查看全局用户信息,可以使用以下命令&am…...
JAVA基础:Collections 工具类实战指南-从排序到线程安全
在 Java 开发中,集合类几乎贯穿每一个项目,而Collections工具类提供了一系列强大的方法,用于操作和增强集合的功能。无论是排序、查找还是线程安全的封装,Collections工具类都是提升代码效率和质量的重要工具。 一、Collections …...
【计算机视觉】TorchVision 深度解析:从核心功能到实战应用 ——PyTorch 官方计算机视觉库的全面指南
TorchVision 深度解析:从核心功能到实战应用 ——PyTorch 官方计算机视觉库的全面指南 1. TorchVision 项目概览核心模块 2. 实战案例:10 大应用场景详解案例 1:使用预训练 ResNet 进行图像分类代码实现常见问题相关论文 案例 2:加…...
case和字符串操作
使用if选择结构 if [];then elif [];then #注意这个地方,java是else if else ; fi 使用for循环结构 使用for循环,语法结构如下所示: for 变量名 in 值1 值2 值3 #值的数量决定循环任务的次数 do命令序列 done#循环输出1到10 for i in {1..10} #注…...
Golang|外观模式和具体逻辑
最终返回的是Document的切片,然后取得Bytes自己再去做反序列化拿到文档的各种详细信息。 外观模式是一种结构型设计模式,它的目的是为复杂的子系统提供一个统一的高层接口,让外部调用者(客户端)可以更简单地使用子系统…...
关于kafka
1.为什么需要消息队列 举个经典的例子。 你是一个网购达人,经常在网上购物。快递小哥到了你的小区后,立刻给你打电话说:“你的快递到了,请马上来取。” 但你是一个合格的牛马,在上班,不方便取快递&#…...
OpenCV 图形API(67)图像与通道拼接函数-----水平拼接(横向连接)两个输入矩阵(GMat 类型)函数concatHor()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于水平拼接两个 GMat 矩阵,要求输入矩阵的行数必须一致: GMat A { 1, 4,2, 5,3, 6 }; GMat B { 7, 10,8, 11,9, 12 }; GM…...
夜莺 v8.0.0-beta.10 部署
夜莺 v8.0.0-beta.10 部署 1. mariadb-server2. Redis安装3. 下载 n9e-v8.0.0-beta.10-linux-amd64.tar.gz设置 root 用户密码配置文件 配置mariadb的登录密码导入数据库表结构配置为 systemd 启动服务重新加载 systemd配置日志 访问夜莺VictoriaMetrics 时序数据库安装接入数据…...
HTML5好看的水果蔬菜在线商城网站源码系列模板7
文章目录 1.设计来源1.1 主界面1.2 关于我们界面1.3 商城界面1.4 商品信息界面1.5 我的账户界面1.6 联系我们界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址&#…...
优化问题中变量分类与作用分析
优化问题中的变量分类与作用 在优化问题中,变量的定义和作用因问题类型和建模需求而异。以下从决策变量、控制变量的区别与联系出发,结合其他相关变量进行系统分析: 1. 决策变量(Decision Variables) 定义:…...
RSS‘25|CMU提出统一空中操作框架:以末端执行器为中心,无人机实现高精度遥操作
导读在科技飞速发展的当下,机器人技术不断拓展其应用边界,空中操作领域成为了研究的热点之一。无人空中操纵器(UAMs)凭借其在高空复杂任务中的巨大潜力,正逐渐改变着诸如高空设备维护、桥梁检测等传统行业的作业模式&a…...
智能指针之设计模式6
本系列文章探讨了智能指针和设计模式的关系,前面五篇文章介绍的是使用设计模式实现了智能指针的相关特性,比如使用工厂模式控制了智能指针对象的创建,使用代理模式控制了资源对象的销毁。本文介绍一下使用智能指针来帮助我们实现相关的设计模…...
【设计模式】GOF概括
一、创建型模式(5种) 1. 单例模式 (Singleton) 适用场景:全局唯一实例(如配置管理、日志工具)。C示例:// 所谓的scott mayer单例模式 class Singleton { public:static Singleton& getInstance() {st…...
深入浅出限流算法(三):追求极致精确的滑动日志
在限流的世界里,精度往往是关键。我们已经讨论过固定窗口(简单但有突刺)和滑动窗口(更平滑但仍有格子边界)。如果我们需要更精确的控制,滑动日志 (Sliding Log) 算法便登场了。 核心思想:记录每…...
一文读懂Tomcat应用之 CentOS安装部署Tomcat服务
目录 一、Tomcat概述 (一)、Tomcat安装目录简介 (二)、Tomcat配置文件简介 1、server.xml文件 2、web.xml 3、context.xml 4、tomcat-users.xml 5、logging.properties 二、Tomcat安装部署 (一)、环境规划 (二)、安装JDK 1、下载JDK二进制安装包 2、解压JDK二进制…...
JVM 内存分配策略
引言 在 Java 虚拟机(JVM)中,内存分配与垃圾回收是影响程序性能的核心机制。内存分配的高效性直接决定了对象创建的速率,而垃圾回收策略则决定了内存的利用率以及系统的稳定性。为了在复杂多变的应用场景中实现高效的内存管理&am…...
轻松上手:使用 Docker Compose 部署 TiDB 的简易指南
作者:ShunWah 在运维管理领域,我拥有多年深厚的专业积累,兼具坚实的理论基础与广泛的实践经验。精通运维自动化流程,对于OceanBase、MySQL等多种数据库的部署与运维,具备从初始部署到后期维护的全链条管理能力。拥有Oc…...
Linux权限管理
权限的概念 在 Linux 系统里,权限管理是系统安全的关键环节。权限管理的核心目的是明确不同用户对文件和目录的操作许可范围,以此来保障系统资源的安全与合理使用。权限管理涉及三种不同的用户角色和三种基本的操作权限。 用户角色 所有者(…...
Crusader Kings III 王国风云 3(十字军之王 3) [DLC 解锁] [Steam] [Windows SteamOS macOS]
Crusader Kings III 王国风云 3(十字军之王 3) [DLC 解锁] [Steam] [Windows & SteamOS & macOS] DLC 版本 至最新全部 DLC 后续可能无法及时更新文章,具体最新版本见下载文件说明; DLC 解锁列表(仅供参考&am…...
架构风格对比
架构风格深度对比:从管道-过滤器到微内核 📜 引言 在软件架构设计中,不同的架构风格适用于不同的业务场景。本文将深入解析 7种主流架构风格,包括它们的核心思想、优缺点、适用场景,并通过对比表格和示例帮助您选择最…...