Kafka的存儲與索引:數據處理的底層奧秘

一、引言

Kafka 之所以能在海量數據的傳輸和處理過程中保持高效的性能和低延遲,背后隱藏著眾多精妙的設計,而其存儲與索引機制便是其中的核心奧秘。接下來,讓我們深入探尋 Kafka 存儲機制的基石與架構。

二、分區與日志組織?

Kafka 中的消息以主題(Topic)為單位進行分類存儲,每個主題可以進一步劃分為多個分區(Partition)。分區是 Kafka 存儲的物理單位,這種設計類似于分布式系統的橫向擴展,帶來了諸多優勢。一方面,它實現了分離存儲,有效解決了一個分區上日志存儲文件過大的問題;另一方面,讀和寫可以同時在多個分區上進行,大大提高了性能,方便擴展和提升并發能力。?

在 Kafka 集群中,每個分區都有一個對應的日志文件,生產者生產的消息會不斷追加到該日志文件末端,且每條消息都有自己的偏移量(Offset)。Offset 是消息在分區中的唯一標識,它從 0 開始,單調遞增,用于記錄消息在分區中的順序和位置。消費者組中的每個消費者,都會實時記錄自己消費到了哪個 Offset,以便出錯恢復時,從上次的位置繼續消費。?

日志分段機制:高效存儲與管理的關鍵?

為防止單個日志文件過大導致數據定位效率低下,Kafka 采取了日志分段(Log Segment)機制。每個分區的日志由多個日志段組成,每個日志段是一個包含一定范圍消息的物理文件。當一個日志段達到配置的大小限制(由log.segment.bytes配置項控制,默認值通常是 1GB),或者達到一定的時間限制(由log.roll.ms或log.roll.hours配置項控制)后,它會被關閉,新的日志段會繼續寫入。?

日志段的命名規則是以該段中第一條消息的 Offset 命名,例如00000000000000000000.log表示該日志段的第一條消息的 Offset 為 0。每個日志段對應三個文件:.log數據文件、.index索引文件和.timeindex時間索引文件 。?

  1. .log 數據文件:用于存儲實際的消息內容。每條消息由一個固定長度的消息頭和一個可變長度的消息體數據組成。消息體包括一個可變長度的消息 Key 和消息實際數據 Value,消息 Key 可以為空。在實際存儲時,一條消息總長度還包括 12 字節額外的開銷,其中 8 字節長度記錄消息的偏移量,另外 4 字節表示消息總長度。?
  2. .index 索引文件:基于偏移量的索引文件,用于將偏移量映射成消息在數據文件中的物理位置。每個索引條目由 offset 和 position 組成,通過稀疏存儲的方式,每隔一定字節的數據(由log.index.interval.bytes指定,默認值為 4096,即 4KB )建立一條索引,這樣可以大大減少索引文件的大小,同時保持良好的查找性能。?
  3. .timeindex 時間索引文件:記錄了每個時間戳和該時間戳所對應的消息的偏移量。當需要按時間范圍消費消息時,TimeIndex 索引使得 Kafka 可以通過時間戳快速查找對應的消息位置。它同樣采用稀疏存儲方式,進一步優化了存儲和查找性能。?

通過日志分段機制,Kafka 將大文件分割成多個小文件進行管理,不僅方便了日志的滾動、清理和壓縮,還提高了數據的讀寫性能。例如,當日志段達到大小限制進行滾動時,Kafka 只需關閉當前日志段,創建一個新的日志段繼續寫入,而不需要對整個日志文件進行復雜的操作。在清理日志時,也可以直接刪除過期的日志段文件,而不會影響其他日志段的正常讀寫。?

日志分段機制和索引文件的設計是 Kafka 實現高效存儲與快速消息定位的重要基礎,為后續深入理解 Kafka 的存儲與索引原理奠定了堅實的基礎。

三、索引文件剖析

3.1 偏移量索引(.index)?

偏移量索引文件(.index)是 Kafka 實現快速消息定位的重要工具。它采用稀疏索引的設計,并不會為每條消息都創建索引項,而是每隔一定字節的數據(由log.index.interval.bytes指定,默認值為 4096 字節,即 4KB)建立一條索引。這種設計巧妙地平衡了索引文件的大小和查找性能。假設一個日志段中有 100 萬條消息,如果為每條消息都建立索引,索引文件將非常龐大,占用大量的磁盤空間,同時在查找索引時也會消耗較多的時間。而稀疏索引則大大減少了索引項的數量,使得索引文件的大小得以控制,同時通過合理的算法,依然能夠快速定位到目標消息。?

每個索引條目由兩部分組成:消息的偏移量(offset)和該消息在數據文件中的物理位置(position)。當 Kafka 需要查找特定偏移量的消息時,它首先會在偏移量索引文件中通過二分查找法找到不大于目標偏移量的最大索引項。以查找偏移量為 5000 的消息為例,假設偏移量索引文件中有 [2000, 10000], [4000, 20000], [6000, 30000] 等索引項,通過二分查找,Kafka 會定位到 [4000, 20000] 這個索引項。然后,Kafka 根據該索引項中的物理位置(這里是 20000),在對應的日志數據文件中從這個位置開始進行順序掃描,比較每條消息的偏移量,直到找到偏移量為 5000 的消息。通過這種先在索引文件中快速定位范圍,再在數據文件中精確查找的方式,Kafka 能夠高效地從海量消息中找到目標消息,大大提高了消息讀取的效率。?

3.2 時間索引(.timeindex)?

時間索引文件(.timeindex)是 Kafka 為滿足按時間范圍檢索消息的需求而引入的。在許多實際應用場景中,消費者需要獲取從某個時間點開始的所有消息,例如分析某個時間段內用戶的行為數據,或者監控某個時間段內系統的運行狀態。時間索引文件的出現,使得 Kafka 可以通過時間戳快速查找對應的消息位置,而不需要遍歷整個日志文件。?

時間索引文件同樣采用稀疏存儲方式,每個索引條目包含消息的時間戳(timestamp)和該時間戳所對應的消息的偏移量(offset)。當需要根據時間戳查找消息時,Kafka 首先會在時間索引文件中查找不小于指定時間戳的最大索引項。假設要查找時間戳為 1600000000000 的消息,時間索引文件中有 [1599999999999, 1000], [1600000000001, 2000] 等索引項,Kafka 會定位到 [1599999999999, 1000] 這個索引項,得到對應的偏移量 1000。然后,再通過這個偏移量在偏移量索引文件中進一步查找,最終定位到消息在日志數據文件中的位置。如果在時間索引文件中沒有找到完全匹配的時間戳,Kafka 會找到最接近且大于指定時間戳的索引項,然后根據這個索引項的偏移量,在日志數據文件中從該位置開始向后查找,直到找到符合時間范圍的消息。?

3.3 索引文件協同工作?

偏移量索引和時間索引在 Kafka 的消息查找過程中協同工作,各自發揮著獨特的作用。偏移量索引適合通過消息的偏移量進行精確查找,而時間索引則為按時間范圍查找消息提供了便利。當消費者需要查找特定偏移量的消息時,偏移量索引能夠快速定位到消息在日志文件中的大致位置,然后通過在日志文件中的順序掃描找到具體的消息。當消費者需要查找某個時間范圍內的消息時,時間索引首先根據時間戳找到對應的偏移量范圍,然后再借助偏移量索引在這個偏移量范圍內定位到具體的消息。?

在一個實時監控系統中,可能需要實時獲取過去 5 分鐘內的所有告警消息。通過時間索引,系統可以快速找到過去 5 分鐘內消息的偏移量范圍,然后利用偏移量索引在這個范圍內定位到所有的告警消息,將這些消息及時展示給監控人員,以便他們能夠及時采取措施。這種索引文件的協同工作機制,使得 Kafka 在處理不同類型的消息查找需求時都能表現出高效的性能,為 Kafka 在各種復雜的應用場景中提供了強大的支持。

四、零拷貝技術

4.1 傳統數據傳輸痛點?

在深入探討 Kafka 中的零拷貝技術之前,我們先來了解一下傳統數據傳輸方式存在的問題。在傳統的數據傳輸過程中,當數據從文件傳輸到網絡時,通常需要經歷多次拷貝操作。假設我們要將一個文件通過網絡發送出去,首先會使用read系統調用,將數據從硬盤讀取到內核緩沖區,這個過程由 DMA(直接內存訪問)完成,CPU 只需下指令,DMA 就會自動將數據拷貝至內核緩沖區。接著,數據從內核緩沖區被拷貝到用戶空間的緩沖區,這一步由read調用觸發,CPU 完全負責這次數據拷貝。然后,通過write系統調用,數據從用戶緩沖區被再次拷貝回內核緩沖區,這次的內核緩沖區與 socket 相關聯。最后,數據從內核緩沖區被傳輸到網卡,發送到網絡,這一步如果沒有 DMA 技術,CPU 需要拷貝數據至網卡 。?

可以看到,在這個過程中,數據經歷了四次拷貝和四次上下文切換。每次read和write調用都需要 CPU 進行多次數據拷貝,嚴重占用 CPU 資源,影響其他任務的執行。當數據量較大時,內存使用量也會明顯增加,可能導致系統性能下降。而且每次read和write調用還涉及用戶態和內核態的切換,加重了 CPU 的負擔。這些問題在處理大文件或高頻率傳輸時尤為明顯,CPU 被迫充當 “搬運工”,性能因此受到嚴重限制。?

4.2 sendfile 系統調用解析?

為了解決傳統數據傳輸的痛點,Linux 內核引入了sendfile系統調用。sendfile系統調用最早在 Linux 2.1.70 版本中引入,并在 Linux 2.2 版本中得到更廣泛支持 。它的主要思想是將文件數據直接從內核的文件緩存傳輸到網絡緩沖區,而不經過用戶空間,這個過程通過 DMA 實現,最大限度地減少了 CPU 的參與。?

當用戶調用sendfile時,系統從硬盤讀取文件內容并存放到內核態的 page cache(頁面緩存),不需要先傳輸到用戶空間。接著,數據從 page cache 直接拷貝到內核態的 socket 緩沖區,然后通過網絡接口發送。整個過程中數據沒有進入用戶空間,減少了兩次不必要的拷貝操作:一是避免了文件數據從內核態到用戶態的拷貝,二是避免了從用戶態到 socket 緩沖區的拷貝。同時,CPU 僅需負責發起傳輸請求及處理完成的中斷信號,而無需實際參與數據傳輸的過程,這顯著降低了 CPU 的使用率,使得 CPU 可以處理其他并發任務,從而提升系統整體性能。?

4.3 Kafka 中的零拷貝應用?

Kafka 在消息消費過程中充分利用了零拷貝技術,特別是在 Consumer 從 Broker 拉取消息以及 Follower 副本從 Leader 副本同步數據時。當 Consumer 向 Broker 請求消息時,Broker 使用sendfile系統調用,直接將磁盤上的消息數據從內核緩沖區傳輸到網絡套接字(socket),而不需要將數據先拷貝到用戶空間再進行發送。同樣,在 Follower 副本同步數據時,Leader 副本也通過sendfile將數據直接發送到 Follower 的網絡套接字,減少了數據在內核空間和用戶空間之間的拷貝次數。?

通過使用零拷貝技術,Kafka 大大提高了數據傳輸的效率。一方面,減少了 CPU 的使用,使得 Kafka 在高吞吐量場景下能夠快速處理大量數據讀寫請求,滿足實時數據處理需求。另一方面,降低了內存占用,避免了不必要的內存拷貝,減少了內存的開銷,這對于大規模數據處理尤為重要,可以顯著降低系統的內存壓力。同時,提高了傳輸效率,減少了網絡延遲,提高了整體系統的響應速度,增強了系統穩定性,確保在高負載情況下系統的穩定運行。在一個高并發的消息處理系統中,大量的 Consumer 同時從 Kafka 集群拉取消息,如果沒有零拷貝技術,CPU 很容易成為性能瓶頸,導致系統響應變慢。而通過零拷貝技術,Kafka 可以高效地處理這些請求,保證系統的高性能運行。

五、分層存儲策略

5.1 冷熱數據的界定?

在 Kafka 的多節點集群環境中,熱數據與冷數據有著明確的區分。熱數據是指那些被攝入 Kafka 主題后,迅速通過各種數據管道,到達下游應用程序,并被頻繁檢索的數據。以煉油廠的生產監控系統為例,各類關鍵設備上的物聯網傳感器會實時產生大量的事件數據,如設備的溫度、壓力、轉速等參數。這些數據對于實時監控設備運行狀態、及時發現潛在故障至關重要,因此屬于熱數據。下游應用程序需要快速獲取這些數據,以便進行實時分析和決策。一旦設備溫度超出正常范圍,系統能夠立即發出警報,提醒操作人員采取相應措施,避免設備損壞或生產事故的發生。?

冷數據則是指同樣被攝入 Kafka 主題,但下游應用程序較少訪問的數據。例如,在電子商務應用中,從第三方倉庫系統攝入的產品數量等庫存更新數據,雖然對于業務運營也很重要,但訪問頻率相對較低。這些數據可能用于定期的庫存盤點、銷售數據分析等,但不需要實時獲取。在促銷活動期間,訂單數據屬于熱數據,需要實時處理和分析,以滿足用戶的購物需求和商家的運營決策。而庫存更新數據在平時的訪問頻率較低,屬于冷數據。將冷數據從 Kafka 集群中移出,存儲到成本效益更高的存儲解決方案中,可以有效降低存儲成本,提高存儲資源的利用率。?

5.2 分層存儲實現方式?

為了實現冷熱數據的分層存儲,Kafka 提供了靈活的配置方式。在 Kafka 集群中,我們可以將數據層劃分為熱數據層和冷數據層。對于熱數據層,由于需要快速檢索數據,通常會使用高性能存儲選項,如 NVMe(非易失性內存表達)或 SSD(固態硬盤)。這些存儲設備具有高速讀寫的特點,能夠滿足熱數據對實時性的要求。而對于冷數據層,可擴展的云存儲服務,如 Amazon S3,則是理想的選擇。云存儲具有成本低、容量大的優勢,適合存儲訪問頻率較低的冷數據。?

在 Kafka 的server.properties文件中,可以進行相關配置。首先,為了更好地控制主題配置,我們可以禁用自動創建主題。在server.properties文件中添加auto.create.topics.enable=false,這樣當主題不存在時,Kafka 不會自動創建,而是需要我們手動創建并進行配置。然后,更新log.dirs屬性,指向提供高速訪問的存儲設備位置,例如log.dirs=/path/to/SSD or / NVMe devices for hot tier,將熱數據存儲在 SSD 或 NVMe 設備上,以確保快速訪問。對于熱數據層的主題,可以使用--config選項進行配置,如topic.config.my_topic_for_hot_tier= log.dirs=/path/to/SSD or NVMe devices for hot tier,將特定主題的熱數據存儲在指定的高性能存儲設備上。同時,根據實際使用案例和需求,還可以調整其他鍵值對,如log.retention.hours(日志保留小時數),控制熱數據的保留時間;default.replication.factor(默認復制因子),設置熱數據的副本數量,以保證數據的可靠性;log.segment.bytes(日志段字節數),控制熱數據日志段的大小。?

對于冷數據層,配置方式有兩種。一種是使用 Confluent 內置的 Amazon S3 Sink 連接器,它能夠將數據從 Apache Kafka? 主題導出至 S3 對象,支持 Avro、JSON 或者 Bytes 格式。通過定期從 Kafka 中輪詢數據,并將其上傳至 S3,實現冷數據的存儲。在從指定主題消費記錄并將這些記錄組織到不同分區后,Amazon S3 Sink 連接器會把每個分區的記錄批次發送到一個文件中,隨后該文件會被上傳到 S3 存儲桶。我們可以使用confluent connect plugin install命令來安裝這個連接器,或者手動下載 ZIP 文件,并在集群中運行 Connect 的每臺機器上安裝該連接器。另一種方式是在 Kafka 的server.properties文件中直接配置 Amazon S3 存儲桶。首先,更新log.dirs屬性,指向 S3 存儲位置,例如log.dirs=/path/to/S3 bucket,并確保為 Kafka 設置了所有必要的 AWS 憑據和權限,以便寫入指定的 S3 存儲桶。然后,使用內置腳本來創建一個將使用冷層(S3)的主題,如bin/kafka-topics.sh --create --topic our_s3_cold_topic --partitions 5 --replication-factor 3 --config log.dirs=s3://our-s3-bucket/path/to/cold/tier --bootstrap-server <IP address of broker>:9092,創建一個使用 S3 存儲冷數據的主題,并根據需求和 S3 存儲的特性,調整 Kafka 中特定于冷數據層的配置,如修改server.properties中的log.retention.hours值,控制冷數據的保留時間。?

5.3 過期策略詳解?

Kafka 提供了一系列參數來控制消息的過期策略,這些參數對于合理管理存儲資源、確保數據的時效性至關重要。主要的過期策略參數包括log.retention.hours、log.retention.minutes、log.retention.ms,它們分別以小時、分鐘和毫秒為單位設置消息的保留時間。log.retention.hours是最常用的參數,默認值為 168 小時(即 7 天),表示消息在 Kafka 集群中最多保留 7 天,超過這個時間的消息將被刪除。如果我們將log.retention.hours設置為 24,那么消息只會保留 24 小時,24 小時后,相關的日志段文件(如果其中的消息都超過了保留時間)將被異步刪除,以釋放磁盤空間。?

除了基于時間的保留策略,Kafka 還提供了基于大小的保留策略,通過log.retention.bytes參數來定義每個日志分區允許使用的最大存儲空間。當某個日志分區的消息數據大小達到此限制時,最早的消息將被刪除,以確保分區大小不超過設定值。在一個存儲資源有限的 Kafka 集群中,如果將log.retention.bytes設置為 10GB,當某個分區的消息數據累計達到 10GB 時,Kafka 會開始刪除最早的消息,以維持分區大小在限制范圍內。?

需要注意的是,時間和大小限制是互斥的,Kafka 將依據首先滿足的條件來清理日志。如果一個日志分區中的消息在達到保留時間之前就已經使分區大小超過了log.retention.bytes的限制,那么 Kafka 會優先根據大小限制刪除最早的消息;反之,如果消息先達到保留時間,而分區大小尚未超過限制,那么 Kafka 會根據時間限制刪除過期的消息。通過合理設置這些過期策略參數,我們可以根據業務需求,在存儲成本和數據保留時間之間找到平衡,確保 Kafka 集群能夠高效、穩定地運行。?

六、總結

Kafka 的存儲與索引機制是其能夠在大數據領域大放異彩的關鍵所在。日志分段機制將大文件分割成小文件,結合偏移量索引和時間索引,實現了高效的消息存儲與快速定位;零拷貝技術通過減少數據拷貝和 CPU 參與,極大地提升了數據傳輸效率;分層存儲策略合理區分冷熱數據,降低了存儲成本,同時過期策略有效管理了存儲資源,確保數據的時效性。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87807.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87807.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87807.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大模型與搜索引擎的技術博弈及未來智能范式演進

基于認知革命與技術替代的全景綜述 一、大模型對搜索引擎的替代性分析&#xff1a;技術范式與市場重構 &#xff08;1&#xff09;技術原理的代際分野 傳統搜索引擎遵循 "爬蟲抓取 - 索引構建 - 關鍵詞排序" 的三段式架構&#xff0c;其核心是基于 PageRank 算法的…

XC7K325T數據采集卡設計原理圖:786-基于X86 CPU+XC7K325T的16路16bit 1M sps同步數據采集卡

基于X86 CPUXC7K325T的16路16bit 1M sps同步數據采集卡 一、板卡概述 板卡為緊湊型的X86FPGA的工業監測處理平臺&#xff0c;高度集成的硬件和完整的labview開發軟件&#xff0c;大大方便客戶現場使用。 二、板卡功能 板卡功能 參數內容 X86 SOM核心板 主頻 2.0GHz …

單片機3種按鍵程序消抖方法

1&#xff0c;查詢法延時模式 u8 key01;u8 x0;KEY1;while(1){if(KEY0) //"按鍵按下"{delay(10); //延時10msif(KEY0 && kdy01) //按下有10ms 且上狀態是1。即下降沿時{key00; //將上狀態置0.防止按住不放時&#xff0…

【java面試】線程篇

【java面試】線程篇 一、基礎知識1 線程與進程的區別2 并行與并發的區別3 創建線程的方式4 線程包含了哪些狀態&#xff0c;狀態之間是如何變化的&#xff1f;5 新建三個線程&#xff0c;如何保證他們按照順序執行&#xff1f;6、java中的wait和sleep方法的不同7 如何停止一個正…

RAGFlow是一個基于深度文檔理解的開源RAG引擎

RAGFlow概述 RAGFlow是一款基于深度文檔理解的開源RAG&#xff08;檢索增強生成&#xff09;引擎&#xff0c;專注于處理復雜文檔結構并提供精準的語義檢索與生成能力。其核心優勢在于結合多模態文檔解析和智能分段技術&#xff0c;優化傳統RAG流程中的信息提取與答案生成效果…

Git Commit 模板完整配置指南

Git Commit 模板完整配置指南 &#x1f4cb; 目錄 Git Commit 模板完整配置指南 &#x1f4cb; 目錄&#x1f3af; 為什么需要 Commit 模板&#x1f4dd; 推薦的 Commit 模板 標準模板格式C 項目特化模板 ?? 系統級配置 1. 創建模板文件2. 配置 Git 使用模板3. 驗證配置 &a…

【ELK服務搭建】

Ubuntu 20.04環境下部署Elastic Stack 8.18日志系統完整指南 一、環境準備 系統要求 Ubuntu 20.04 LTS硬件配置&#xff1a;4核CPU / 8GB內存 / 100GB硬盤網絡&#xff1a;需外網訪問權限 1. 基礎環境配置 首先安裝SSH服務以便遠程管理&#xff1a; # 更新軟件源 apt u…

Mac電腦 Office 2024 LTSC 長期支持版(Excel、Word、PPT)

Office 2024 mac&#xff0c;是一款是一款專為蘋果電腦用戶設計的高性能、高安全性的辦公套裝 集成了Word、Excel、PowerPoint、Outlook等經典應用&#xff0c;為用戶提供了一站式的辦公解決方案。 不僅繼承了Office系列一貫的卓越性能&#xff0c;還在功能性和用戶體驗上進行…

深入解析 Schema 在不同數據庫中的百變面孔

在數據庫的世界里&#xff0c;數據是核心資產&#xff0c;但如何高效、有序、安全地組織和理解這些數據&#xff1f;答案就是 Schema&#xff08;模式或架構&#xff09;。它如同建筑的圖紙、樂隊的樂譜&#xff0c;是數據庫的設計藍圖和運行規則手冊。今天&#xff0c;我們就來…

Python 數據分析與可視化 Day 2 - 數據清洗基礎

&#x1f3af; 今日目標 學會識別和處理缺失數據&#xff08;NaN&#xff09;學會刪除/填補缺失值清理重復數據修改列類型&#xff0c;準備數據分析 &#x1f9fc; 一、缺失值處理&#xff08;NaN&#xff09; ? 1. 檢查缺失值 import pandas as pd df pd.read_csv("…

3DS中文游戲全集下載 任天堂3DS簡介3DS第一方獨占游戲推薦

任天堂3DS 的詳細介紹&#xff0c;涵蓋其硬件特性、核心功能、游戲陣容及歷史地位&#xff1a; 3DS游戲全集下載 https://pan.quark.cn/s/dd40e47387e7 https://sink-698.pages.dev/3ds CIA CCA 等格式可用于3DS模擬器和3DS實體機 3DS 是什么&#xff1f; 全稱&#xff1a;Nin…

【Python小練習】3D散點圖

資產風險收益三維分析 背景 王老師是一名金融工程研究員&#xff0c;需要對多個資產的預期收益、風險&#xff08;波動率&#xff09;和與市場的相關性進行綜合分析&#xff0c;以便為投資組合優化提供決策依據。 代碼實現 import matplotlib.pyplot as plt from mpl_toolk…

安寶特案例丨突破傳統手術室,Vuzix AR 眼鏡圓滿助力全膝關節置換術

在巴西圣保羅醫院的手術室里&#xff0c;骨科權威 Ricardo Gobbi醫生正戴著 安寶特 Vuzix 智能 AR 眼鏡&#xff0c;為一位膝關節炎患者實施全膝關節置換術。與傳統手術不同的是&#xff0c;他的視野中實時疊加著骨骼三維模型、切割路徑標線和動態數據 —— 這并非科幻場景&…

qt設置文件自動保存-cnblog

步驟&#xff1a; 「工具」->「選項」->「環境」->「Auto-save modified files」。 可開啟/關閉自動保存文件功能&#xff0c;還可設置自動保存時間的間隔(最短間隔1分鐘)。 鐘)。

linux下如何找到dump文件被生成到哪里了

在大多數 Linux 系統中&#xff0c;核心轉儲文件&#xff08;core dump&#xff09;通常由系統自動保存在當前工作目錄下&#xff0c;或者由配置決定其保存位置。核心轉儲文件的默認文件名通常包含進程 ID&#xff08;PID&#xff09;和程序名&#xff0c;例如 core.PID 或 cor…

API 調試工具校驗 JSON Mock 接口(一):無參請求與基礎響應驗證

在前后端分離的開發模式中&#xff0c;JSON Mock 工具為前端開發人員在后端接口未就緒時提供了極大便利&#xff0c;能夠模擬返回 JSON 數據的 API 接口&#xff0c;實現前端獨立開發與測試。而 API 開發調試工具 作為一款強大的接口測試工具&#xff0c;可進一步對這些 Mock 接…

單體架構、微服務架構和分布式架構的區別

. 架構定義與核心特征 1.1 單體架構(Monolithic Architecture) 單體架構是將所有功能模塊集中在一個單一代碼庫中的傳統架構模式: 所有功能(UI層、業務邏輯、數據訪問)打包為單一部署單元通常使用單一技術棧開發(如Spring Boot、Django等)共享單一數據庫實例進程內通信(方法…

如何重新安裝 Rust

在開發過程中&#xff0c;我們有時可能需要重新安裝 Rust&#xff0c;比如遇到版本沖突、環境配置錯誤&#xff0c;或者僅僅是想更新到最新版本。本文將詳細介紹如何卸載現有 Rust 安裝&#xff0c;并重新安裝 Rust&#xff0c;同時還會介紹一些常見的配置技巧&#xff0c;幫助…

使用springboot實現過濾敏感詞功能

一&#xff0c;在springboot項目的resources目錄里創建sensitive-words.text&#xff08;敏感詞文本&#xff09; 每個詞獨自一行 列如&#xff1a; 賭博 吸毒 開票 二&#xff0c;在util創建工具類SensitiveFilter package com.nowcoder.community.util;Component public c…

Vue 蒼穹外賣

Vue 蒼穹外賣 node_modules&#xff1a;當前項目依賴的js包 assets&#xff1a;靜態資源存放目錄 components&#xff1a;公共組件存放目錄 App.vue&#xff1a;項目的主組件&#xff0c;頁面的入口文件 main.js&#xff1a;整個項目的入口文件 package.json&#xff1a;項…