【Java高頻面試問題】高并發篇

【Java高頻面試問題】高并發篇

  • Kafka原理
    • 核心組件
    • 高吞吐核心機制
    • 高可用設計
  • Kafka 如何保證消息不丟失
  • 如何解決Kafka重復消費
    • 一、生產者端:根源防重
    • 二、消費者端:精準控制
    • 三、業務層:冪等性設計(核心方案)
  • 如何解決Kafka消息積壓
    • 一、緊急止血:快速降低積壓
    • 二、消費端優化:提升吞吐能力
    • 三、生產端控流:源頭限速
    • 四、集群與架構改造
    • 💎 決策樹:按場景選擇方案

Kafka原理

img

核心組件

?組件??作用?
?Producer?生產者,將消息發布到指定Topic(可指定分區策略)
?Broker?Kafka服務節點,組成集群存儲消息(默認端口9092)
?Topic?邏輯消息分類(如訂單流、日志流)
?Partition?Topic的分區,每個分區是?有序不可變?的消息隊列(實現水平擴展與并行處理)
?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
英文地址,請注明出處:http://en.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;實現企業知識管理、智能客服等場景的敏捷落…