消息中间件:Kafka消息丢失与堆积问题分析与解决方案
消息中间件:Kafka消息丢失与堆积问题分析与解决方案
Kafka作为分布式消息系统,广泛应用于实时数据流处理、大数据分析等领域。然而,在实际应用中,Kafka可能会面临消息丢失和消息堆积的问题,这些问题如果得不到有效处理,会严重影响系统的稳定性。本文将详细分析Kafka消息丢失与堆积的常见原因,并提供相应的解决方案。
文章目录
- 消息中间件:Kafka消息丢失与堆积问题分析与解决方案
- 一、概述
- 二、Kafka消息丢失问题
- 2.0 总结表格(太长不看版)
- 2.1 生产者端消息丢失
- 2.2 Broker端消息丢失
- 2.3 消费者端消息丢失
- 三、Kafka消息堆积问题
- 3.1 消费者处理速度慢
- 3.2 消费者线程不足
- 3.3 网络或磁盘I/O瓶颈
- 3.4 Broker性能问题
- 3.5 总结
- 四、解决Kafka消息丢失与堆积问题
- 4.1 消息丢失问题的解决方案
- 4.2 消息堆积问题的解决方案
- 五、总结
- 附录1:再平衡
- 1-a 再平衡的触发条件
- 1-b 再平衡的影响
- 1-c 减少再平衡的频率
- 1-d 总结
一、概述
Kafka在分布式架构中具有极高的吞吐量和可靠性,但这并不意味着它完全不会遇到问题。消息丢失和消息堆积是Kafka使用中的常见挑战。消息丢失会导致数据不完整,而消息堆积则会影响系统性能,甚至导致崩溃。理解这些问题的根本原因,并采取相应的措施加以预防,是确保Kafka系统稳定运行的关键。
二、Kafka消息丢失问题
2.0 总结表格(太长不看版)
下表全面总结了Kafka中可能导致消息丢失的各种原因、具体发生的位置、问题描述以及解决方案。表格形式能够帮助读者快速对比和理解不同场景下的消息丢失及其应对措施。
| 原因 | 发生位置 | 问题描述 | 解决方案 |
|---|---|---|---|
| 未启用acks(确认机制) | 生产者端 | 生产者未等待Broker确认,消息可能在传输中丢失。 | 设置acks=all,确保消息被所有副本(Replicas)确认后才认为发送成功。 |
| 生产者重试策略不当 | 生产者端 | 生产者发送消息失败时,未能进行足够的重试或重试间隔过短,导致消息丢失。 | 配置合理的重试次数(retries)和重试间隔(retry.backoff.ms),提高消息发送成功率。 |
| 消息发送超时 | 生产者端 | 生产者等待Broker响应的时间超过配置的超时时间,认为消息发送失败,导致丢弃。 | 增加request.timeout.ms配置,确保生产者有足够时间等待Broker响应。 |
| 网络不稳定 | 生产者端 | 由于网络不稳定,消息可能无法成功传输到Broker,导致丢失。 | 提高网络稳定性,或配置Kafka的重试机制,确保网络恢复后重试发送消息。 |
| 副本不足(Replica不足) | Broker端 | 副本数量不足,Broker崩溃时可能导致消息丢失。 | 增加副本数量,确保数据冗余,副本数建议不小于3。 |
| 未同步的副本(Unsynced Replicas) | Broker端 | 主副本未能及时同步消息到其他副本,主副本崩溃后,导致数据丢失。 | 启用min.insync.replicas参数,确保足够数量的副本同步后才确认消息。 |
| 磁盘故障 | Broker端 | Broker的存储磁盘故障导致未备份的数据丢失。 | 使用可靠的硬件,并定期备份数据,防止磁盘故障导致的数据丢失。 |
| Broker崩溃 | Broker端 | Broker在处理消息时崩溃,未成功写入磁盘的数据会丢失。 | 使用多副本机制和日志复制,确保一个Broker崩溃时,其他Broker可以接管数据处理。 |
| 自动提交偏移量(Offset) | 消费者端 | 偏移量在消息处理前自动提交,处理失败时无法重新消费,导致消息丢失。 | 关闭自动提交,手动管理偏移量,在消息处理成功后再提交。 |
| 消息处理失败 | 消费者端 | 消费者处理消息时发生错误,但未重新处理该消息,导致丢失。 | 实现消息重试机制,确保在处理失败时能够重新消费消息。 |
| 消费者组再平衡 | 消费者端 | 消费者组再平衡时,消费者在未处理完所有消息前关闭,导致部分消息丢失。 | 再平衡时确保偏移量管理到位,并减少再平衡频率。 |
| 网络问题 | 消费者端 | 消费者与Broker之间网络连接不稳定,导致消息消费失败。 | 提高网络稳定性,并实现消费者的断线重连机制。 |
2.1 生产者端消息丢失
生产者在将消息发送到Kafka的过程中可能会遇到以下几种导致消息丢失的情况:
-
未启用acks(确认机制):
- 原因:当生产者未设置
acks参数,或将acks设置为0时,Kafka不会等待Broker的确认即认为消息发送成功。如果在发送过程中出现网络故障或Broker崩溃,消息可能会丢失。 - 解决方案:将
acks参数设置为all或-1,以确保消息被所有副本(Replicas)确认后再返回成功给生产者。
Properties props = new Properties(); props.put("acks", "all"); // 等待所有副本确认 - 原因:当生产者未设置
-
生产者重试策略不当:
- 原因:如果生产者发送消息失败时,未能进行足够的重试,或者重试间隔过短,则消息可能会在多次失败后被丢弃。
- 解决方案:配置合理的重试次数(
retries)和重试间隔(retry.backoff.ms),以提高消息发送的成功率。
props.put("retries", 5); // 设置重试次数 props.put("retry.backoff.ms", 500); // 设置重试间隔为500ms -
消息发送超时:
- 原因:生产者等待Broker响应的时间超过了配置的超时时间时,可能会认为消息发送失败,从而丢弃该消息。
- 解决方案:适当增加
request.timeout.ms配置,确保生产者有足够的时间等待Broker响应。
props.put("request.timeout.ms", 30000); // 设置请求超时为30秒 -
网络不稳定:
- 原因:在网络不稳定的情况下,消息可能无法成功传输到Broker,导致消息丢失。
- 解决方案:提高网络的稳定性,或者配置Kafka的重试机制,确保在网络恢复后重试发送消息。
2.2 Broker端消息丢失
Broker在处理消息存储与分发时,可能由于以下原因导致消息丢失:
-
副本不足(Replica不足):
- 原因:Kafka的高可用性依赖于数据在多个副本(Replicas)上的冗余存储。如果副本数量不足,且唯一的副本所在的Broker崩溃,则会导致消息丢失。
- 解决方案:为每个主题设置足够的副本数量,通常建议副本数不小于3,以确保数据冗余。
# 创建主题时指定副本数量kafka-topics --create --topic my-topic --partitions 3 --replication-factor 3 --bootstrap-server localhost:9092
-
未同步的副本(Unsynced Replicas):
- 原因:如果主副本(Leader Replica)未能及时将消息同步到其他副本,主副本崩溃后,其他副本可能没有最新的消息,导致数据丢失。
- 解决方案:启用
min.insync.replicas参数,确保只有足够数量的副本同步成功后,消息才会被确认。props.put("min.insync.replicas", 2); // 至少2个副本同步
-
磁盘故障:
- 原因:如果Broker的存储磁盘出现故障,未能备份的数据可能会丢失。
- 解决方案:使用可靠的硬件设备,并定期备份数据,防止因磁盘故障导致的数据丢失。
-
Broker崩溃:
- 原因:如果Broker在处理消息时崩溃,未成功写入磁盘的数据会丢失。
- 解决方案:使用多副本机制和日志复制,确保在一个Broker崩溃时,其他Broker可以接管数据处理。
2.3 消费者端消息丢失
在消费者处理消息的过程中,以下情况可能导致消息丢失:
-
自动提交偏移量(Offset):
- 原因:消费者在处理消息之前,如果偏移量(Offset)已经自动提交,则在处理失败时无法重新消费该消息,导致丢失。
- 解决方案:关闭自动提交,手动管理偏移量,确保在消息处理成功后再提交偏移量。
props.put("enable.auto.commit", "false"); // 禁用自动提交 -
消息处理失败:
- 原因:如果消费者在处理消息时发生错误,但未重新处理该消息,可能会导致消息丢失。
- 解决方案:实现消息重试机制,确保在处理失败时能够重新消费该消息。
-
消费者组再平衡:
- 原因:当消费者组发生再平衡时,消费者可能会在未处理完所有消息前关闭,导致部分消息丢失。
- 解决方案:在再平衡时确保偏移量管理到位,并减少再平衡的频率。
-
网络问题:
- 原因:如果消费者与Broker之间的网络连接不稳定,可能导致消息消费失败。
- 解决方案:提高网络的稳定性,并实现消费者的断线重连机制。
三、Kafka消息堆积问题
3.1 消费者处理速度慢
消费者处理速度不足是导致消息堆积的主要原因之一:
-
复杂的消息处理逻辑:
- 原因:如果消费者的消息处理逻辑过于复杂,处理单条消息的时间较长,会导致消息堆积。
- 解决方案:优化消息处理逻辑,或者将复杂的处理逻辑异步化,以减少单条消息的处理时间。
-
单个消费者实例能力不足:
- 原因:如果消费者实例处理能力不足,难以跟上生产者的消息发送速度,会导致消息堆积。
- 解决方案:增加消费者实例数,以并行处理更多的消息,提高处理速度。
-
消息批处理配置不当:
- 原因:消费者拉取消息的批次过小,导致频繁拉取消息,增加处理开销。
- 解决方案:适当增加
max.poll.records配置,减少每次拉取的次数。
props.put("max.poll.records", 500); // 每次拉取500条消息 -
不合理的消费配置:
- 原因:如设置不合理的
fetch.min.bytes或fetch.max.wait.ms,可能导致消费者等待时间过长或频繁拉取消息,影响消费效率。 - 解决方案:根据业务需求合理配置上述参数。
- 原因:如设置不合理的
3.2 消费者线程不足
消费者线程不足或分区分配不均也会导致消息堆积:
-
分区数量远多于消费者实例数:
- 原因:当分区数量远多于消费者实例数时,部分分区将闲置,无法及时消费消息,导致堆积。
- 解决方案:增加消费者实例,确保每个分区都有对应的消费者处理。
-
消费者组内成员数不足:
- 原因:如果消费者组的成员数量少于分区数,部分分区数据将得不到消费,导致堆积。
- 解决方案:增加消费者组内的成员数,使其与分区数量相匹配。
-
不均衡的分区分配:
- 原因:如果分区分配不均衡,部分消费者负载过高,导致消息处理速度下降,堆积加剧。
- 解决方案
:确保分区均匀分配,避免某些消费者处理负载过重。
- 线程管理不当:
- 原因:消费者线程池管理不当,线程不足或超载,导致无法有效处理消息。
- 解决方案:合理配置线程池,确保有足够的线程来处理消息。
3.3 网络或磁盘I/O瓶颈
网络和磁盘I/O瓶颈也是导致消息堆积的常见原因:
-
网络带宽不足:
- 原因:如果消费者的网络带宽不足以支撑数据的消费速度,消息将堆积在Broker中。
- 解决方案:升级网络带宽或优化网络配置,确保数据能够快速传输。
-
磁盘I/O性能不足:
- 原因:消费者需要将消息写入磁盘,而磁盘I/O性能不足,处理速度下降,导致堆积。
- 解决方案:优化磁盘I/O性能,或使用SSD等高速存储介质。
-
数据传输延迟:
- 原因:网络传输的延迟导致消费者拉取消息的速度低于生产者的生产速度。
- 解决方案:优化网络延迟,或在消费者端增加缓冲区。
-
Broker响应慢:
- 原因:由于Broker自身的性能瓶颈(如内存或CPU资源不足),导致响应消费者的拉取请求变慢,造成消息堆积。
- 解决方案:扩展Kafka集群,增加更多的Broker,分担负载。
3.4 Broker性能问题
Broker性能问题直接影响消息处理的效率:
-
Broker资源不足:
- 原因:Broker的CPU、内存或磁盘资源不足,无法及时处理大量的消息请求,导致消息堆积。
- 解决方案:增加Broker的资源配置或增加Broker节点数量。
-
过度的垃圾回收:
- 原因:Java垃圾回收(GC)导致Broker响应延迟或暂停,影响消息的处理效率。
- 解决方案:优化JVM参数,减少垃圾回收的影响,或使用更高效的垃圾回收机制。
-
磁盘使用率过高:
- 原因:当Broker的磁盘使用率过高时,可能会导致写入速度降低,消息无法及时存储。
- 解决方案:监控磁盘使用率,必要时进行磁盘扩容或清理过期数据。
-
数据压缩配置不当:
- 原因:不合理的数据压缩配置可能导致Broker处理数据时CPU负载过高,影响消息的存储速度。
- 解决方案:合理配置压缩算法,权衡CPU使用率和磁盘空间之间的关系。
3.5 总结
流程图展示了面对Kafka消息堆积问题时的处理流程,包括增加消费者实例、优化消费者逻辑、扩展Kafka集群以及优化Kafka配置等解决方案,并通过提高消费能力缓解消息堆积。流程图形式可以帮助读者直观理解如何逐步解决消息堆积问题。
四、解决Kafka消息丢失与堆积问题
4.1 消息丢失问题的解决方案
-
生产者设置acks参数:将
acks参数设置为all或-1,确保消息在所有副本(Replicas)确认后再返回成功。 -
增加副本数量:为每个主题设置足够的副本数量,确保数据冗余,提高可靠性。
-
优化Broker配置:合理配置Kafka Broker,确保日志复制和存储的稳定性,减少数据丢失的风险。
-
监控与报警机制:建立完善的监控和报警机制,及时发现并解决可能导致消息丢失的问题。
4.2 消息堆积问题的解决方案
-
增加消费者实例数:通过增加消费者实例来提高处理能力,确保消息能及时被消费。
-
优化消费者代码:简化消息处理逻辑,减少单条消息的处理时间,提高整体处理速度。
-
扩展Kafka集群:增加Broker节点,分担系统负载,避免单个节点成为瓶颈。
-
合理配置Kafka参数:根据实际业务需求,合理配置Kafka的相关参数,如消息批处理大小、消费者线程数等,提升处理效率。
五、总结
Kafka作为一个高性能的分布式消息系统,虽然具有很高的吞吐量和可靠性,但仍然可能遇到消息丢失和消息堆积问题。通过本文的详细分析和解决方案,读者可以更好地理解这些问题的根本原因,并在实际应用中采取相应的措施加以预防和解决。合理配置Kafka的各个组件,并针对不同场景优化系统性能,可以有效避免这些问题,确保系统的稳定运行。
附录1:再平衡
消费者组再平衡(Consumer Group Rebalance) 是 Kafka 中消费者组在运行过程中为了确保分区的消费者能够均匀分配而进行的一种自动调整过程。当消费者组中的成员发生变化时(例如有新的消费者加入或已有的消费者离开),Kafka 会触发一个再平衡过程,使得每个分区重新分配到消费者组的各个消费者上。
1-a 再平衡的触发条件
消费者组再平衡可能在以下几种情况下触发:
-
新消费者加入组:当一个新的消费者加入现有的消费者组时,Kafka 会触发再平衡,以便将更多的分区分配给这个新加入的消费者。
-
已有消费者离开组:当现有的某个消费者关闭或崩溃时,Kafka 会触发再平衡,将原来分配给该消费者的分区重新分配给剩余的消费者。
-
分区增加:如果主题的分区数量增加,Kafka 需要通过再平衡将新增的分区分配给消费者组中的消费者。
-
消费者组协调器变更:如果消费者组协调器(负责管理消费者组内成员和分区分配的 Kafka 组件)发生变更,也会触发再平衡。
1-b 再平衡的影响
再平衡是一个必要但可能产生短暂影响的过程。再平衡期间,消费者暂时停止读取分区中的消息,等待新的分区分配完成。这种中断会导致消费者组在一段时间内无法消费消息,从而可能影响系统的实时性。此外,再平衡可能导致消息处理的顺序性被打破,因为分区可能会被重新分配给不同的消费者。
1-c 减少再平衡的频率
为了减少再平衡对系统的影响,可以采取以下措施:
-
稳定的消费者组:尽量减少消费者组成员的频繁加入和退出,保持组的稳定性。
-
合理配置心跳和超时:Kafka 提供了一些配置参数,如
session.timeout.ms和heartbeat.interval.ms,可以通过调整这些参数,减少消费者误认为离开的情况,从而减少不必要的再平衡。 -
使用静态成员:Kafka 提供了静态成员功能(通过
group.instance.id配置),可以避免在重启消费者时触发再平衡。
1-d 总结
消费者组再平衡是 Kafka 在管理分区分配时的关键机制,它确保了消费者组内的负载均衡,但同时也会带来短暂的中断。理解并合理配置再平衡的相关参数,可以有效减少其对系统的影响,确保 Kafka 消费的稳定性和连续性。
✨ 我是专业牛,一个渴望成为大牛🏆的985硕士🎓,热衷于分享知识📚,帮助他人解决问题💡,为大家提供科研、竞赛等方面的建议和指导🎯。无论是科研项目🛠️、竞赛🏅,还是图像🖼️、通信📡、计算机💻领域的论文辅导📑,我都以诚信为本🛡️,质量为先!🤝 如果你觉得这篇文章对你有所帮助,别忘了点赞👍、收藏📌和关注🔔哦!你的支持是我继续分享知识的动力🚀!✨ 如果你有任何问题或需要帮助,随时留言📬或私信📲,我都会乐意解答!😊
相关文章:
消息中间件:Kafka消息丢失与堆积问题分析与解决方案
消息中间件:Kafka消息丢失与堆积问题分析与解决方案 Kafka作为分布式消息系统,广泛应用于实时数据流处理、大数据分析等领域。然而,在实际应用中,Kafka可能会面临消息丢失和消息堆积的问题,这些问题如果得不到有效处理…...
mac终端代理配置指南
终端代理配置指南 在 macOS 中,你可以通过几种不同的方法来配置终端代理。这里介绍两种常见的设置方式:使用 alias 和 shell 函数。 方法 1:使用 Alias 配置代理 打开终端配置文件 默认情况下,macOS 终端使用的是 zsh。如果你的系…...
mbedTLS生成客户端,服务端密钥及CA证书
1. mbedTLS源码:https://github.com/Mbed-TLS/mbedtls.git 2. 生成步骤: 2.1 编译上述源码 2.2 生成CA私钥和自签名证书: 进入编译的build目录,比如:/mbedtls-development/build# 2.2.1生成CA私钥 执行下面的命令&…...
如何有效应对突发技术故障:以网易云音乐为例
引言 在互联网行业,任何一个在线服务都可能遭遇突发的技术故障。这些故障不仅影响用户体验,还可能对公司的品牌形象造成损害。因此,如何快速响应并高效解决这些问题成为了每一个开发团队的重要课题。本文将以网易云音乐在2024年8月19日下午遭…...
上传文件到github仓库
REF: https://blog.csdn.net/litianxiang_kaola/article/details/74075151 已有repository,往仓库里更新内容 点击gitlab里的clone 在git bash中使用git clone,这个时候会将网上的仓库下载到本地,你可以把想要更新的内容直接拖到仓库里 …...
clip-path实现图片边角的裁剪
img {clip-path: polygon(0 7px,7px 0,calc(100% - 20px) 0,100% 20px,100% 100%,16px 100%,0 calc(100% - 16px));}每一个逗号隔开的就是路径坐标 左上角的两个点 0 7px ,7px 0 右上角 calc(100% - 20px) 0,100% 20px 相当于通过这些点练成的线的圈起来的部分就是剩…...
【C++ Primer Plus习题】2.7
问题: 解答: #include <iostream> using namespace std;void print(int hour, int minute) {cout << "Time:" << hour << ":" << minute << endl; }int main() {int hour0;int minute 0;cout << "请输入…...
uboot中 fastboot udp 协议分析
注: 1. 本文所分析的fastboot源码不是android下的源码,而是恩智浦芯片厂商在IMX6UL芯片的uboot源码中自己实现的源码,二者不同,请读者注意区分。一些图片是网上找到的,出处不好注明,请见谅。 2. 分析fastbo…...
redis hash类型的命令
1.hset 格式: hset key field value [field value ...](value是字符串) 返回值:设置成功的键值对的个数 2.hget:获取键值对 格式:hget key field 3.hexists:判断hash中是否存在指定 格式:…...
【OpenCV】 中使用 Lucas-Kanade 光流进行对象跟踪和路径映射
文章目录 一、说明二、什么是Lucas-Kanade 方法三、Lucas-Kanade 原理四、代码实现4.1 第 1 步:用户在第一帧绘制一个矩形4.2 第 2 步:从图像中提取关键点4.3 第 3 步:跟踪每一帧的关键点 一、说明 本文针对基于光流法的目标追踪进行叙述&am…...
ES 支持乐观锁吗?如何实现的?
本篇主要介绍一下Elasticsearch的并发控制和乐观锁的实现原理,列举常见的电商场景,关系型数据库的并发控制、ES的并发控制实践。 并发场景 不论是关系型数据库的应用,还是使用Elasticsearch做搜索加速的场景,只要有数据更新&…...
前端宝典十一:前端工程化稳定性方案
一、工程化体系介绍 1、什么是前端工程化 前端工程化 前端 软件工程;前端工程化 将工程方法系统化地应用到前端开发中;前端工程化 系统、严谨、可量化的方法开发、运营和维护前端应用程序;前端工程化 基于业务诉求,梳理出最…...
yum 数据源的切换
本来准备安装一个ntp 服务器时间进行同步,但是使用yum install ntp -y 但是却失败了 原因是yum自带的镜像源不能用了,所以要想使用yum 多功能只能切换yum 对应的镜像源了 如果你的服务商是可以使用wget命令的: wget -O /etc/yum.repos.d/Ce…...
MySQL入门学习-命令行工具.mysqlbinlog
MySQL 命令行工具mysqlbinlog用于处理二进制日志文件。 一、关于mysqlbinlog工具的详细介绍: 1、命令行工具mysqlbinlog的特点和使用方法: - 特点: - 可以解析和查看二进制日志文件的内容。 - 支持多种输出格式,如文本、SQ…...
WARNING XXX is not overriding the create method in batch
WARNING XXX is not overriding the create method in batch api.modeldef create(self, vals):quvals[name]youqu self.env[crm.qu].sudo().search([(name, , qu),(shi_id,,vals[shi_id])])if len(youqu)>0:raise UserError(_("该区名已存在,无需再填加…...
使用预训练的 ONNX 格式的目标检测模型(基于 YOLOv8n-pose)姿态监测
具体步骤如下: 加载图像: 从指定路径读取一张图像(这里假设图像名为bus.jpg)。将图像从 BGR 颜色空间转换为 RGB 颜色空间。 图像预处理: 计算图像的高度、宽度,并确定其中的最大值作为新图像的边长。创建一…...
matlab实现模拟退火算法
模拟退火算法(Simulated Annealing, SA)是一种通用概率优化算法,用于在给定的大搜索空间内寻找问题的近似全局最优解。该算法灵感来源于物理学中固体物质的退火过程,其中温度逐渐降低,粒子逐渐趋于能量最低状态。 在M…...
【Prettier】代码格式化工具Prettier的使用和配置介绍
前言 前段时间,因为项目的prettier的配置和eslint格式检查有些冲突,在其prettier官网和百度了一些配置相关的资料,在此做一些总结,以备不时之需。 Prettier官网 Prettier Prettier 是一种前端代码格式化工具,支持ja…...
【计算机网络】网络基础
👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…...
MFC在对话框中实现打印和打印预览
首先在这里感谢互联网的大哥们!同时我讨厌动不动就是要vip才能查看!所以我写的不需要vip就能看。只求点个赞。 直接上代码,新建6个文件CPrintFrame.cpp;CPrintFrame.h;CPrintPreviewView.cpp;CPrintPrevie…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
