【Java高频面试问题】高并发篇

【Java高频面试问题】高并发篇

  • Kafka原理
    • 核心组件
    • 高吞吐核心机制
    • 高可用设计
  • Kafka 如何保证消息不丢失
  • 如何解决Kafka重复消费
    • 一、生产者端:根源防重
    • 二、消费者端:精准控制
    • 三、业务层:幂等性设计(核心方案)
  • 如何解决Kafka消息积压
    • 一、紧急止血:快速降低积压
    • 二、消费端优化:提升吞吐能力
    • 三、生产端控流:源头限速
    • 四、集群与架构改造
    • 💎 决策树:按场景选择方案

Kafka原理

img

核心组件

组件作用
Producer生产者,将消息发布到指定Topic(可指定分区策略)
BrokerKafka服务节点,组成集群存储消息(默认端口9092)
Topic逻辑消息分类(如订单流、日志流)
PartitionTopic的分区,每个分区是‌有序不可变‌的消息队列(实现水平扩展与并行处理)
Consumer消费者,通过Consumer Group订阅Topic(组内消费者竞争分区消费权)
ZooKeeper管理集群元数据、Broker注册、Leader选举(Kafka 2.8+开始支持KRaft模式替代ZK)

高吞吐核心机制

  1. 分区与并行化

    • Topic划分为多个Partition,分布在不同Broker,提升吞吐能力。
    • Producer/Consumer可并行读写不同分区。
  2. 存储优化

    • 顺序写入磁盘‌:避免随机I/O,速度提升百倍。
    • **零拷贝(Zero-Copy)**‌:sendfile()减少内核态数据拷贝。
    • 页缓存‌:利用OS缓存加速读写,而非直接写盘。
  3. 批量处理

    • Producer累积消息批量发送(batch.size + linger.ms)。
    • Consumer批量拉取消息(max.poll.records)。

高可用设计

  1. 副本机制(Replica)

    • 每个分区配置N个副本(如replication.factor=3)。
    • Leader处理读写,Follower同步数据,Leader故障时自动选举新Leader。
  2. ISR(In-Sync Replicas)

    • 动态维护与Leader数据同步的副本集合。
    • 仅ISR中的副本可参与Leader选举,确保数据一致性。

Kafka 如何保证消息不丢失

  1. 生产者设置**acks=all**:所有ISR副本写入成功才返回确认。
  2. 生产者(Producer) 调用send方法发送消息之后,为其添加回调函数。
ListenableFuture<SendResult<String, Object>> future = kafkaTemplate.send(topic, o);future.addCallback(result -> logger.info("生产者成功发送消息到topic:{} partition:{}的消息", result.getRecordMetadata().topic(), result.getRecordMetadata().partition()),ex -> logger.error("生产者发送消失败,原因:{}", ex.getMessage()));
  1. 消费者手动关闭自动提交 offset,每次在真正消费完消息之后再自己手动提交 offset (enable.auto.commit=false + commitSync())。结合分布式锁可以防止消费者重复消费

如何解决Kafka重复消费

一、生产者端:根源防重

  1. 启用幂等生产者

    • 设置 enable.idempotence=true,为每条消息附加唯一序列号(PID + Sequence Number),Broker 自动过滤重复提交的消息 。
    • 适用场景:消息发送阶段的网络重试导致重复。
  2. 事务消息机制

    • 跨生产者与消费者的分布式事务(transactional.id),确保消息发送与 Offset 提交原子性。
producer.initTransactions();  // 初始化事务
producer.beginTransaction();
producer.send(record);
producer.commitTransaction(); // 提交事务

二、消费者端:精准控制

  1. 手动提交 Offset

    • 关闭自动提交(enable.auto.commit=false),在‌业务逻辑完成后再提交 Offset‌ 。
  2. 避免 Rebalance 导致重复

    • 优化会话超时时间(session.timeout.ms),防止误判消费者下线触发不必要的分区重分配 。

三、业务层:幂等性设计(核心方案)

  1. 唯一标识去重

    • 生产者为消息注入全局唯一 ID(如 UUID),消费者通过 DB/Redis 判重 。
  2. 数据库唯一约束

    • 利用数据库主键/唯一索引拦截重复数据插入(如订单ID)。
  3. 状态机驱动

    • 基于业务状态流转(如订单“已支付”状态),拒绝重复操作 。

生产者防重复是‌第一道防线‌,消费者幂等设计是‌终极保障

如何解决Kafka消息积压

一、紧急止血:快速降低积压

  1. 扩容消费者组

    • 增加消费者实例‌:确保消费者数量 ≤ 分区数,避免资源闲置(例如:4 分区主题至少配 4 个消费者)。
# 查看积压情况
kafka-consumer-groups.sh --bootstrap-server <broker> --group <group> --describe
  1. 跳过非关键消息

    • 按时间戳跳过:--to-datetime "2025-06-18T00:00:00.000"
    • 允许丢失部分数据时,重置 Offset 到最新位置:
kafka-consumer-groups.sh --bootstrap-server <broker> --group <group> --reset-offsets --to-latest --execute

二、消费端优化:提升吞吐能力

  1. 提升单消费者效率

    • 多线程消费‌:单分区内使用线程池并行处理消息(需确保消息无序或分区内有序)。
    • 批量拉取‌:增大 max.poll.records(默认 500)和 fetch.max.bytes,减少网络交互次数。
  2. 异步化处理

    • 将耗时操作(如 DB 写入、计算)移交线程池,消费者仅提交 Offset。
    • 使用内存队列解耦:消费者快速拉取 → 队列缓冲 → 工作线程处理。
  3. 避免阻塞操作

    • 优化慢 SQL、减少同步 RPC 调用,用缓存预加载数据。

三、生产端控流:源头限速

  1. 动态限流

    • 令牌桶算法‌:控制生产者写入速率,匹配消费能力。
    • 降级策略‌:业务高峰时关闭非核心消息生产者。
  2. 优化生产者参数

linger.ms=50     # 适当增大批量发送延迟
batch.size=16384 # 增大批次大小(默认 16KB)
compression.type=lz4  # 启用压缩减少网络负载

四、集群与架构改造

  1. 扩容分区与集群

    • 增加主题分区数(需重启或新建主题),突破并行消费瓶颈。
    • 扩展 Broker 节点和磁盘,提升集群整体吞吐。
  2. 分流与降级

    • 新建临时 Topic‌:将积压消息转发到更多分区的新 Topic,消费者并行处理。
    • 离线补偿‌:消费者直接消费最新消息,积压数据由离线任务补处理。
  3. 监控体系

    • 实时监控 Consumer Lag,设置阈值告警(如 Lag >10,000 触发)。
    • 跟踪 CPU、磁盘 IO、网络流量,定位集群瓶颈。

💎 决策树:按场景选择方案

积压原因优先级方案
消费能力不足增加消费者 + 消费端多线程优化
生产流量瞬时飙升生产者限流 + 消息跳过
分区数不足扩容分区 + Broker 节点
消费逻辑阻塞(如慢 SQL)异步化改造 + 查杀异常进程
持续产能失衡架构拆分 + 离线补偿

关键原则‌:

  • 优先 ‌扩容消费者‌ 和 ‌消费并行化‌ 提升吞吐。
  • 生产端限流是 ‌预防性手段‌,避免系统雪崩。
  • 分区数决定 ‌并行上限‌,需提前规划弹性。

持续更新中…

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

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

相关文章

关于结构体,排序,递推的详细讲解(从属于GESP四级)

本章内容 排序算法基础 结构体 递推 简单双指针 一、排序算法基础三剑客 冒泡 Bubble、选择 Selection、插入 Insertion 1. 预备知识 1.1 排序算法评价指标 指标 含义 影响答题的典型问法 时间复杂度 算法在最坏、平均或最好情况下所需比较 / 交换次数 “写出此算法…

离线部署docker中的containerd服务

containerd 是一个行业标准的容器运行时&#xff0c;专注于简单、健壮的容器执行。它是从 Docker 中分离出来的项目&#xff0c;旨在作为一个底层的运行时接口&#xff0c;供更高层次的容器管理层使用。 containerd 负责镜像传输、存储、容器执行、网络配置等工作。它向上为 Do…

web布局15

CSS 网格布局除了提供定义网格和放置网格项目的相关属性之外&#xff0c;也提供了一些控制对齐方式的属性。这些控制对齐方式的属性&#xff0c;和 Flexbox 布局中的对齐属性 justify-* 、align-* 、*-items 、*-content 、 *-self 等是相似的&#xff1a; 在网格布局中可以用它…

leetcode 291. Word Pattern II和290. Word Pattern

目录 291. Word Pattern II 290. Word Pattern 291. Word Pattern II 回溯法哈希表 class Solution {unordered_map<char,string> hashmap;unordered_set<string> wordset; public:bool wordPatternMatch(string pattern, string s) {return backtrack(pattern,…

大模型的开发应用(十三):基于RAG的法律助手项目(上):总体流程简易实现

RAG法律助手项目&#xff08;上&#xff09;&#xff1a;总体流程简易实现 1 项目介绍1.1 方案选型1.2 知识文档 2 文档解析3 知识库构建3.1 构建知识节点3.2 嵌入向量初始化3.2 向量存储 4 查询4.1 初始化大模型4.2 模型响应4.2 本文程序存在的问题 完整代码 1 项目介绍 本项…

覆盖迁移工具选型、增量同步策略与数据一致性校验

1 引言 在当今数据驱动的时代&#xff0c;数据迁移已成为系统迭代、数据库升级、云迁移和架构演进中的关键环节。根据Gartner的调研&#xff0c;超过70%的企业级数据迁移项目因工具选择不当或同步策略缺陷而延期或失败。数据迁移不仅仅是简单的数据搬运&#xff0c;而是涉及数…

`docker run -it --rm` 笔记250624

docker run -it --rm 笔记250624 docker run -it --rm 是一个强大且常用的 Docker 命令组合&#xff0c;特别适合交互式开发和调试场景。以下是详细解析和使用指南&#xff1a; 参数解析 参数作用典型场景-i保持 STDIN 打开&#xff08;交互模式&#xff09;需要输入命令的交…

解锁阿里云AnalyticDB:数据仓库的革新利器

AnalyticDB&#xff1a;云数据仓库新势力 在数字化浪潮中&#xff0c;数据已成为企业的核心资产&#xff0c;而云数据仓库作为数据管理与分析的关键基础设施&#xff0c;正扮演着愈发重要的角色。阿里云 AnalyticDB 作为云数据仓库领域的佼佼者&#xff0c;以其卓越的性能、创…

【PX30 Qt 5.15 交叉编译环境搭建完整指南】

PX30 Qt 5.15 交叉编译环境搭建完整指南 (Ubuntu 20.04 → PX30 aarch64) &#x1f3af; 项目概览 本指南详细记录了在Ubuntu 20.04上搭建针对Rockchip PX30的Qt 5.15.2交叉编译环境的完整过程&#xff0c;包括实际操作步骤、遇到的问题及解决方案。 目标平台: Rockchip PX3…

深入理解读写锁 ReadWriteLock

在高性能并发编程中&#xff0c;如何有效地管理共享资源的访问是核心挑战之一。传统的排他锁&#xff08;如ReentrantLock&#xff09;在读多写少的场景下&#xff0c;性能瓶颈尤为突出&#xff0c;因为它不允许并发读取。Java并发包&#xff08;java.util.concurrent.locks&am…

Unity Addressable使用之检测更新流程

补充知识 关键文件说明 Addressable打包后会生成多种文件&#xff0c;主要包括 .hash、.json 和 .bundle 文件&#xff0c;它们各自有不同的作用。 .hash 文件&#xff08;哈希文件&#xff09; 作用&#xff1a; 用于 版本对比&#xff0c;检查资源是否有更新。存储的是 资…

Elasticsearch 中实现推荐搜索(方案设想)

1. 存储商品数据的数据类型 为了支持推荐搜索&#xff0c;商品数据通常需要包含以下字段&#xff1a; 商品索引结构 PUT /products {"mappings": {"properties": {"product_id": {"type": "keyword" // 商品 ID},"…

Aerotech系列(4)Aerotech.A3200名空间

IconTypeDescriptionAxisMask Represents a selection of axes Controller Represents a controller Allows configuring and c

React Router 是怎么实现灵活导航的?

&#x1f399; 欢迎来到《前端达人 React播客书单》第 21 期。 视频版&#xff08;播客风格更精彩&#xff09; 今天我们不讲 Hook&#xff0c;来拆解前端开发中另一个高频组件&#xff1a;React Router 的进阶导航模式。 你可能用过 <Link> 或 <Route>&#xff0…

Modbus TCP转Profibus DP网关与JF - 600MT 称重变送器轻松实现数据互换

Modbus TCP转Profibus DP网关与JF - 600MT 称重变送器轻松实现数据互换 在工业自动化领域&#xff0c;不同设备之间的通信与数据交互至关重要。Modbus TCP转Profibus DP网关作为连接不同协议设备的关键桥梁&#xff0c;发挥着不可或缺的作用。本文将以JF - 600MT称重变送器与3…

聊聊 SQL 注入那些事儿

相信大家对于学校们糟糕的网络环境和运维手段都早有体会&#xff0c;在此就不多做吐槽了。今天我们来聊一聊SQL注入相关的内容。 何谓SQL注入&#xff1f; SQL注入是一种非常常见的数据库攻击手段&#xff0c;SQL注入漏洞也是网络世界中最普遍的漏洞之一。大家也许都听过某某学…

多传感器融合

目录 多传感器融合 多传感器融合的方向 传感器融合方案介绍 LOAM LIO-SAM LVI-SAM 多线激光雷达性质 什么是运动畸变 两步优化的帧间里程记 IMU 器件介绍及选型建议 IMU 标定方法简介 视觉里程计 VS 激光里程计 LVI-SAM 激光视觉融合思路简介 多传感器融合工程实践经验与技巧 多…

Auto-GPT vs ReAct:两种智能体思路对决

目录 Auto-GPT vs ReAct&#xff1a;两种智能体思路对决 &#x1f9e0; 一、智能体的演化背景 &#x1f9e9; 二、Auto-GPT&#xff1a;自循环的执行体 &#x1f50d; 三、ReAct&#xff1a;推理 行动的交错协同 ⚔️ 四、对比总结 &#x1f6e0; 五、你该选谁&#xff…

本地部署大模型性能测试,DeepSeek-R1-0528-Qwen-8B 依然是我的不二之选

大家好&#xff0c;我是 ai 学习的老章 介绍一个大模型并发性能测试工具 看一下我高频使用的&#xff0c;在2*4090显卡上部署的 DeepSeek-R1-0528-Qwen-8B 性能如何 _我_特别喜欢的三个DeepSeek版本 DeepSeek-R1-0528 蒸馏 Qwen3:8B 大模型&#xff0c;双 4090 本地部署&am…

华为云Flexus+DeepSeek征文|华为云 Dify 高可用部署教程:CCE 容器集群一键构建企业级智能应用

前言 在数字化转型加速的企业级应用场景中&#xff0c;构建高可用智能平台已成为业务创新的核心驱动力。本文深度解析基于华为云CCE容器服务的Dify智能应用部署实践&#xff0c;揭示如何通过云原生架构与AI技术的深度融合&#xff0c;实现企业知识管理、智能客服等场景的敏捷落…