RabbitMQ 與其他 MQ 的對比分析:Kafka/RocketMQ 選型指南(二)

四、三者性能大比拼

4.1 吞吐量

吞吐量是衡量消息隊列處理能力的重要指標,它反映了在單位時間內消息隊列能夠處理的消息數量。在這方面,Kafka 表現最為出色,其獨特的設計使其能夠輕松處理每秒數百萬條消息 。Kafka 采用分布式架構和分區機制,將消息分散到多個分區并行處理,同時利用順序寫磁盤和零拷貝技術,大大提高了數據的寫入和讀取速度,從而實現了超高的吞吐量,非常適合大數據實時流處理、日志收集等高吞吐量場景 。在一個大型電商平臺的日志收集系統中,每天會產生數十億條用戶行為日志,Kafka 能夠高效地接收和傳輸這些日志數據,為后續的數據分析和挖掘提供了有力支持。

RocketMQ 的吞吐量也相當可觀,它采用順序寫盤和零拷貝技術,減少了磁盤 I/O 開銷,提高了消息處理速度,能夠滿足高并發場景下的需求 。在阿里的雙 11 購物狂歡節中,RocketMQ 成功處理了每秒數百萬筆訂單消息,保障了整個電商系統的穩定運行。雖然 RocketMQ 的吞吐量略低于 Kafka,但在高并發場景下仍然表現出色,適用于電商、金融等對吞吐量要求較高的行業 。

RabbitMQ 的吞吐量相對較低,一般在每秒幾萬條消息的級別 。這是因為 RabbitMQ 的設計更側重于可靠性和靈活性,在高并發性能優化方面相對較少。它采用 AMQP 協議,實現相對復雜,為了保證消息的可靠性,在吞吐量上做了一定的取舍 。在一些對消息處理速度要求不是特別高,但對可靠性和靈活性要求較高的場景中,如小型企業的業務系統、即時通訊等,RabbitMQ 仍然是一個不錯的選擇 。在一個小型電商企業的訂單處理系統中,訂單消息的產生量相對較小,RabbitMQ 能夠可靠地處理這些消息,并且通過其靈活的路由機制,將訂單消息準確地發送到相應的處理模塊。

4.2 延遲

延遲是指從消息發送到被接收處理之間的時間間隔,對于一些對實時性要求較高的場景,延遲是一個關鍵指標 。RabbitMQ 的延遲最低,通常在微秒級,這得益于其輕量級的設計和高效的消息傳遞機制 。它適用于對消息實時性要求極高的場景,如金融交易中的實時通知、即時通訊等。在股票交易系統中,價格的實時變化需要及時通知到用戶,RabbitMQ 能夠快速地將價格變動消息發送到用戶端,確保用戶能夠及時做出交易決策 。

RocketMQ 的延遲在毫秒級,雖然比 RabbitMQ 稍高,但仍然能夠滿足大多數實時性要求較高的場景,如金融領域的交易確認、電商的訂單狀態變更通知等 。在金融支付系統中,用戶完成支付后,需要立即收到支付成功的通知,RocketMQ 能夠在短時間內將通知消息發送到用戶的手機或客戶端,提供良好的用戶體驗 。

Kafka 的延遲相對較高,這是由于它采用異步批量處理的方式,消息在發送端和接收端會有一定的堆積和處理時間 。Kafka 適用于對吞吐量要求高、對延遲不敏感的場景,如日志收集、大數據處理等。在日志收集場景中,雖然日志消息的傳輸可能存在一定的延遲,但這并不影響對日志數據的后續分析和處理 。

4.3 消息持久化

消息持久化是保證消息可靠性的重要手段,它確保在消息隊列服務器出現故障、重啟等情況下,消息不會丟失 。Kafka 將消息持久化到磁盤,采用日志分段存儲和索引文件的方式,保證了數據的可靠性和持久性 。它還支持數據壓縮,減少了存儲成本 。Kafka 為每個分區設置了多個副本,分布在不同的 Broker 上,通過 ISR(In-Sync Replicas)機制保障高可用,當某個 Broker 出現故障時,其他副本可以迅速替代它,保證數據的可用性和一致性 。在一個分布式日志存儲系統中,Kafka 可以將各個服務器產生的日志數據持久化存儲,即使某個服務器出現故障,日志數據也不會丟失,仍然可以被后續的分析系統使用 。

RabbitMQ 支持消息的持久化,將持久化消息同時寫入內存和磁盤,確保在服務器重啟等情況下消息不丟失 。它還提供了鏡像隊列機制,可以將隊列的副本分布到多個節點,提高了可用性和可靠性 。在銀行轉賬系統中,轉賬消息需要確保可靠傳輸,RabbitMQ 通過持久化和鏡像隊列機制,保證了轉賬消息的安全存儲和可靠傳遞,避免因服務器故障導致轉賬信息丟失 。

RocketMQ 支持消息的持久化,采用 CommitLog 統一存儲所有消息,ConsumeQueue 按 Topic 和 Queue 維度索引的存儲結構 。它支持同步刷盤和異步刷盤兩種模式,同步刷盤可以保證數據的強一致性,但性能相對較低;異步刷盤性能較高,但在服務器突然斷電等極端情況下可能會丟失少量數據 。RocketMQ 還支持主從復制,保證數據一致性,通過配置可以實現數據零丟失 。在電商的訂單系統中,訂單消息的持久化非常重要,RocketMQ 可以可靠地保存訂單消息,為后續的訂單處理和查詢提供數據支持 。

4.4 集群和高可用性

Kafka 采用分布式集群架構,由多個 Broker 組成集群,每個 Broker 負責存儲和處理部分數據 。通過 ZooKeeper(舊版)或 KRaft(新版自洽模式)協調集群,實現了高可用性和自動故障轉移 。當某個 Broker 出現故障時,Kafka 會自動將其負責的分區轉移到其他正常的 Broker 上,確保系統的正常運行 。Kafka 還支持動態擴展集群,通過添加新的 Broker 節點,可以輕松擴展集群的處理能力 。許多大型互聯網公司,如谷歌、微軟等,每天都要處理海量的用戶數據,Kafka 的集群和高可用性特性使得它們能夠輕松應對數據量的增長,保證系統的穩定運行 。

RabbitMQ 的集群模式有普通模式和鏡像模式 。普通模式下,元數據同步,消息分布式存儲;鏡像模式下,全量數據復制,每個節點都有所有隊列的完整副本,提高了可用性,但資源消耗較大 。RabbitMQ 的集群配置相對復雜,需要考慮節點之間的同步、負載均衡等問題 。在一些對可靠性要求極高的場景中,如金融核心交易系統,會采用 RabbitMQ 的鏡像模式,確保消息的可靠存儲和高可用性 。

RocketMQ 的集群由 NameServer(命名服務器)、Controller(控制器)和 Broker(代理)組成 。NameServer 負責管理和提供 Broker 的路由信息,Controller 負責協調和管理整個集群的工作,Broker 負責接收和存儲消息 。RocketMQ 支持同步 / 異步刷盤,數據可靠性高,適合事務消息和順序消息場景 。在分布式事務場景中,RocketMQ 通過其集群架構和事務消息機制,確保了消息在多個服務之間的可靠傳遞和一致性 。

4.5 擴展性

Kafka 的擴展性非常出色,它的分布式架構和分區機制使得添加新的 Broker 節點變得非常簡單 。當業務增長,數據量增加時,只需添加新的 Broker 節點,Kafka 會自動將新的分區分配到新節點上,實現負載均衡,從而輕松擴展集群的處理能力 。許多大型互聯網公司的大數據處理平臺都采用 Kafka 作為消息隊列,利用其強大的擴展性來應對不斷增長的數據量 。

RocketMQ 也支持水平擴展,通過添加新的 Broker 節點,可以增加集群的消息處理能力 。但與 Kafka 相比,RocketMQ 的擴展過程相對復雜一些,需要手動進行一些配置和調整 。在電商大促等業務量劇增的場景中,RocketMQ 可以通過擴展集群來應對高并發的消息處理需求 。

RabbitMQ 在集群擴展性方面相對較弱,其鏡像模式雖然提高了可用性,但由于全量數據復制,會消耗大量的資源,并且在擴展節點時需要進行復雜的配置和同步操作 。在中小規模的系統中,RabbitMQ 的擴展性可以滿足需求,但在大規模、高并發的場景下,其擴展性的局限性就會凸顯出來 。

五、消息模型和特性差異

5.1 消息模型對比

RabbitMQ 支持多種消息模型,其中包括簡單隊列模型、工作隊列模型、發布 / 訂閱模型、路由模型和主題模型 。在簡單隊列模型中,生產者將消息發送到隊列,消費者從隊列中獲取消息,一個隊列對應一個消費者;在工作隊列模型中,多個消費者可以從同一個隊列中競爭消費消息,提高消息處理的并行性;發布 / 訂閱模型通過 Exchange 將消息廣播到所有綁定的隊列,實現一對多的消息分發;路由模型根據 routing key 將消息路由到指定的隊列;主題模型則支持更靈活的通配符匹配,根據主題規則將消息路由到多個隊列 。這些豐富的消息模型使得 RabbitMQ 能夠滿足各種復雜業務場景的需求,例如在一個電商系統中,可以根據不同的業務場景選擇不同的消息模型,訂單創建消息可以通過路由模型發送到對應的訂單處理隊列,商品庫存變更消息可以通過發布 / 訂閱模型通知到多個相關服務 。

Kafka 采用發布 / 訂閱模型,生產者將消息發送到特定的 Topic,消費者通過訂閱 Topic 來接收消息 。一個 Topic 可以有多個 Partition,消息會被發送到不同的 Partition 中,實現并行處理 。Kafka 還引入了 Consumer Group(消費組)的概念,同一個消費組內的多個消費者可以并行消費同一個 Topic 的不同 Partition 中的消息,提高消費效率 。在一個實時數據處理系統中,多個消費者可以組成一個消費組,共同消費 Kafka 中存儲的用戶行為數據,每個消費者負責處理一部分數據,從而實現高效的數據處理 。

RocketMQ 支持發布 / 訂閱模型和順序消息模型 。在發布 / 訂閱模型中,與 Kafka 類似,生產者將消息發送到 Topic,消費者訂閱 Topic 來接收消息 。RocketMQ 的順序消息模型則保證了消息在生產和消費時的順序性,通過將消息發送到同一個 Queue(隊列),并由同一個消費者按順序消費該 Queue 中的消息,實現了消息的順序處理 。在電商的訂單處理場景中,訂單的創建、支付、發貨等消息需要嚴格按照順序處理,RocketMQ 的順序消息模型可以確保這些消息按照正確的順序被處理,避免出現數據不一致的情況 。

5.2 特性差異分析

在死信隊列方面,RabbitMQ 和 RocketMQ 都提供了死信隊列的支持 。RabbitMQ 通過設置隊列的相關參數,如 x-dead-letter-exchange 和 x-dead-letter-routing-key,將無法被正常消費的消息發送到死信隊列中 ;RocketMQ 則通過配置 Consumer 的參數,將消費失敗的消息發送到死信隊列 。死信隊列在實際應用中非常重要,它可以幫助我們處理那些無法被正常消費的消息,例如在電商系統中,當訂單消息因為某些原因無法被正常處理時,可以將其發送到死信隊列,后續再進行人工處理或重新投遞 。

重試隊列方面,RabbitMQ 和 RocketMQ 也都支持 。RabbitMQ 可以通過死信隊列和消息 TTL(Time To Live,生存時間)等機制實現消息的重試;RocketMQ 則提供了消息重試的配置參數,消費者在消費消息失敗后,可以按照配置的重試次數和重試間隔進行重試 。在一個分布式任務系統中,當某個任務消息消費失敗時,可以通過重試隊列讓任務消息重新被消費,提高任務處理的成功率 。

優先級隊列方面,RabbitMQ 支持優先級隊列,生產者可以在發送消息時設置消息的優先級,隊列會根據優先級對消息進行排序,優先處理高優先級的消息 ;Kafka 和 RocketMQ 默認不支持優先級隊列,但可以通過一些自定義的方式來實現類似的功能 。在一個任務調度系統中,對于一些緊急任務的消息,可以設置較高的優先級,確保這些任務能夠被優先處理 。

消費模式上,RabbitMQ 支持推模式(Push)和拉模式(Pull) 。推模式下,RabbitMQ 主動將消息推送給消費者;拉模式下,消費者主動從 RabbitMQ 中拉取消息 。Kafka 主要采用拉模式,消費者通過輪詢的方式從 Kafka 集群中拉取消息;RocketMQ 同時支持推模式和拉模式,并且在推模式下進行了優化,通過長輪詢的方式實現了高效的消息推送 。在一個實時監控系統中,對于一些對實時性要求較高的監控數據,可以采用推模式,及時將數據推送給消費者;對于一些對實時性要求不是特別高的數據,可以采用拉模式,由消費者根據自身的處理能力主動拉取數據 。

廣播模式方面,RabbitMQ 通過 Exchange 的廣播類型(如 fanout 類型的 Exchange)實現廣播模式,將消息發送到所有綁定的隊列,實現一對多的消息分發 ;Kafka 通過設置不同的 Consumer Group 來實現類似廣播的效果,每個 Consumer Group 都可以獨立消費 Topic 中的消息 ;RocketMQ 也支持廣播模式,消費者可以設置為廣播消費模式,此時消息會被發送到該消費者組內的所有消費者 。在一個系統通知場景中,系統的通知消息可以通過廣播模式發送給所有相關的服務或用戶,確保他們都能及時收到通知 。

冪等性方面,Kafka 和 RocketMQ 都提供了一定的冪等性支持 。Kafka 通過 Producer 的冪等性配置,確保在重試發送消息時不會重復寫入;RocketMQ 通過消息的唯一標識和去重機制,保證消息在消費端的冪等性 。RabbitMQ 本身不直接提供冪等性支持,但可以通過應用層的去重邏輯來實現 。在一個電商的訂單支付場景中,為了避免重復支付,需要保證支付消息的冪等性,Kafka 和 RocketMQ 可以通過自身的機制來保證,而 RabbitMQ 則需要在應用層進行額外的去重處理 。

刷盤策略上,RocketMQ 支持同步刷盤和異步刷盤兩種模式 。同步刷盤可以保證數據的強一致性,但性能相對較低;異步刷盤性能較高,但在服務器突然斷電等極端情況下可能會丟失少量數據 。Kafka 采用異步批量刷盤的方式,將消息先寫入內存緩沖區,然后批量刷盤到磁盤,提高了寫入性能,但在一定程度上也增加了數據丟失的風險 。RabbitMQ 將持久化消息同時寫入內存和磁盤,確保在服務器重啟等情況下消息不丟失 。在一個對數據一致性要求極高的金融交易系統中,可能會選擇 RocketMQ 的同步刷盤模式;而在一個對性能要求較高的日志收集系統中,可能會選擇 Kafka 的異步批量刷盤模式 。

六、應用場景分析

在電商場景中,訂單處理、庫存管理、物流通知等環節都需要高效可靠的消息傳遞 。對于訂單創建、支付成功等消息,要求消息的可靠性和實時性,此時 RabbitMQ 的可靠性和低延遲特性能夠滿足需求,確保訂單消息的準確傳遞和及時處理 。在處理海量的用戶行為數據,如瀏覽、點擊、下單等數據的實時收集和分析時,Kafka 的高吞吐量和分布式架構則更為合適,能夠快速處理大量數據,為電商的實時推薦、營銷分析等提供數據支持 。而在涉及分布式事務的場景,如訂單支付成功后同時更新庫存、通知物流等操作,RocketMQ 的事務消息特性可以保證這些操作的一致性,確保業務流程的正確執行 。

金融場景對消息的可靠性、一致性和安全性要求極高 。在股票交易系統中,每一筆交易的信息都必須準確無誤地傳遞和處理,RabbitMQ 的可靠性和靈活的路由功能能夠保證交易消息的可靠傳輸和正確路由 。在處理大量的金融交易數據,如實時行情數據的分發、交易記錄的存儲等方面,Kafka 的高吞吐量和持久化特性能夠滿足需求,確保數據不會丟失 。而在金融領域的分布式事務場景,如跨行轉賬等,RocketMQ 的事務消息和高可靠性可以保證轉賬操作的原子性和一致性,避免出現資金不一致的情況 。

日志處理場景中,主要需求是能夠高效地收集、傳輸和存儲海量的日志數據 。Kafka 由于其高吞吐量和分布式架構,非常適合作為日志收集和傳輸的工具,能夠快速地將各個服務器產生的日志數據收集起來,并可靠地傳輸到日志存儲和分析系統 。在對日志數據進行實時分析和處理時,Kafka 還可以與流處理框架(如 Flink、Spark Streaming)集成,實現對日志數據的實時計算、過濾、聚合等操作 。雖然 RabbitMQ 和 RocketMQ 也可以用于日志處理,但在處理海量日志數據的吞吐量和擴展性方面,Kafka 具有明顯的優勢 。

在實時數據處理場景中,如實時監控、實時推薦等,對消息的實時性和處理能力要求較高 。RabbitMQ 的低延遲特性使其在對實時性要求極高的場景中表現出色,能夠快速地將實時數據傳遞給處理模塊 。Kafka 則在處理大量實時數據時具有優勢,其高吞吐量和分布式架構能夠高效地處理和分析海量的實時數據流 。RocketMQ 在實時數據處理場景中也有很好的表現,它的高吞吐量和低延遲特性,以及豐富的消息特性,能夠滿足不同實時數據處理場景的需求 。在實時推薦系統中,需要快速地對用戶行為數據進行分析和處理,Kafka 和 RocketMQ 都可以作為實時數據的傳輸通道,將實時產生的數據快速傳遞給下游的實時處理系統,進行實時的數據分析和處理 。

七、選型建議

在選擇合適的消息隊列時,需要綜合考慮多個因素,以下是一些選型建議:

  • 性能需求:如果對吞吐量要求極高,如處理海量日志數據、實時流計算等場景,Kafka 是首選,它能夠輕松應對每秒數百萬條消息的高并發場景 。若在高并發場景下,同時對延遲也有一定要求,RocketMQ 也是不錯的選擇,其高吞吐量和低延遲特性能夠滿足大多數高并發業務的需求 。如果應用對消息的實時性要求極高,延遲越低越好,如金融交易的實時通知、即時通訊等場景,RabbitMQ 的微秒級延遲則更為合適 。
  • 功能需求:若應用涉及分布式事務,需要保證消息的一致性,RocketMQ 的事務消息特性能夠很好地滿足這一需求 。對于需要靈活路由規則的場景,如根據不同的業務條件將消息路由到不同的隊列,RabbitMQ 豐富的 Exchange 類型和靈活的路由機制可以實現復雜的路由邏輯 。如果應用主要是進行大數據處理、實時流處理,Kafka 的分區機制和高吞吐量更適合這種大規模數據處理的場景 。
  • 技術棧:如果團隊主要使用 Java 技術棧,RocketMQ 基于 Java 開發,在代碼閱讀、二次開發和與現有 Java 項目的集成方面具有優勢 。而對于大數據團隊,Kafka 與大數據生態系統(如 Hadoop、Spark 等)的無縫對接,使其成為大數據處理場景下的理想選擇 。RabbitMQ 支持多種協議(如 AMQP、MQTT、STOMP 等),如果項目中需要與不同協議的系統進行通信,RabbitMQ 是一個不錯的選擇 。
  • 運維難度:RabbitMQ 提供了直觀的可視化管理界面,運維人員可以方便地監控和管理消息隊列的運行狀態,對于運維經驗相對較少的中小團隊來說,更容易上手和維護 。RocketMQ 和 Kafka 在集群配置和運維方面相對復雜一些,需要對其架構和原理有深入的理解,但對于有較強自研能力和運維經驗的團隊來說,可以進行深度定制和優化 。
  • 社區支持:Kafka 擁有龐大的社區和豐富的生態系統,有大量的開源工具和插件可供使用,遇到問題時可以在社區中找到豐富的解決方案和技術支持 。RabbitMQ 也有活躍的社區,并且在企業級應用中廣泛使用,相關的技術文檔和教程也很多 。RocketMQ 的社區相對較小,但隨著其在開源社區的發展,也在不斷壯大,并且有阿里巴巴的技術支持作為后盾 。

八、總結

RabbitMQ、Kafka 和 RocketMQ 作為三款主流的消息隊列,各自具備獨特的特點和優勢,適用于不同的應用場景。RabbitMQ 憑借其基于 AMQP 協議的可靠性、靈活的路由機制和豐富的消息模型,在對可靠性和靈活性要求高的場景中表現出色,如金融交易、企業級應用等;Kafka 以其超高的吞吐量、分布式架構和對大數據生態的良好支持,成為大數據處理、實時流計算等領域的首選;RocketMQ 則融合了兩者的優點,在高并發、低延遲和高可靠性方面表現卓越,尤其適用于電商、互聯網等行業的分布式事務和高并發場景 。

在實際項目選型中,沒有絕對的最優選擇,而是需要根據項目的具體需求、技術棧、運維能力等多方面因素進行綜合考慮。性能需求決定了消息隊列能否滿足系統的吞吐量和延遲要求;功能需求則關系到消息隊列是否支持項目所需的特定功能,如事務消息、順序消息等;技術棧的兼容性影響著開發和維護的難度;運維難度和社區支持則對系統的長期穩定運行和問題解決提供保障 。

希望通過本文的對比分析,讀者能夠對 RabbitMQ、Kafka 和 RocketMQ 有更深入的了解,在面對消息隊列選型時,能夠做出明智、合理的決策。同時,也鼓勵讀者在實際項目中深入探索和實踐,不斷積累經驗,充分發揮消息隊列在分布式系統中的強大作用 。

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

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

相關文章

【C】箭頭運算符

在C語言中,p_tone->power_off 是一種通過指針訪問結構體成員的方法,稱為箭頭運算符(->)。它主要用于以下場景: 1. 語法解釋 p_tone:是一個指向結構體(或聯合體)的指針。powe…

【Unity】 HTFramework框架(六十六)缺省的運行時組件檢視器

更新日期:2025年5月29日。 Github 倉庫:https://github.com/SaiTingHu/HTFramework Gitee 倉庫:https://gitee.com/SaiTingHu/HTFramework 索引 一、缺省的運行時組件檢視器1.自定義運行時組件檢視器 二、使用缺省的運行時組件檢視器1.定義組…

AI和大數據:是工具,還是操控人心的“隱形之手”?

AI和大數據:是工具,還是操控人心的“隱形之手”? 開場白:聊點現實的 在這個數據至上的時代,我們的生活被AI和大數據悄然改變。從電商推薦、短視頻算法,到招聘篩選、智慧城市,它們像一個貼心的…

k8s部署ELK補充篇:kubernetes-event-exporter收集Kubernetes集群中的事件

k8s部署ELK補充篇:kubernetes-event-exporter收集Kubernetes集群中的事件 文章目錄 k8s部署ELK補充篇:kubernetes-event-exporter收集Kubernetes集群中的事件一、kubernetes-event-exporter簡介二、kubernetes-event-exporter實戰部署1. 創建Namespace&a…

Apache 高級配置實戰:從連接保持到日志分析的完整指南

Apache 高級配置實戰:從連接保持到日志分析的完整指南 前言 最近在深入學習 Apache 服務器配置時,發現很多朋友對 Apache 的高級功能還不夠了解。作為一個在運維路上摸爬滾打的技術人,我想把這些實用的配置技巧分享給大家。今天這篇文章會帶…

【Stable Diffusion 1.5 】在 Unet 中每個 Cross Attention 塊中的張量變化過程

系列文章目錄 文章目錄 系列文章目錄前言特征圖和注意力圖的尺寸差異原因在Break-a-Scene中的具體實現總結 前言 特征圖 (Latent) 尺寸和注意力圖(attention map)尺寸在擴散模型中有差異,是由于模型架構和注意力機制的特性決定的。 特征圖和注意力圖的尺寸差異原…

【監控】Prometheus+Grafana 構建可視化監控

在云原生和微服務架構盛行的今天,監控系統已成為保障業務穩定性的核心基礎設施。作為監控領域的標桿工具,Prometheus和Grafana憑借其高效的數據采集、靈活的可視化能力,成為運維和開發團隊的“標配”。 一、Prometheus Prometheus誕生于2012…

替代 WPS 的新思路?快速將 Word 轉為圖片 PDF

在這個數字化辦公日益普及的時代,越來越多的人開始關注文檔處理工具的功能與體驗。當我們習慣了某些便捷操作時,卻發現一些常用功能正逐漸變為付費項目——比如 WPS 中的一項實用功能也開始收費了。 這款工具最特別的地方在于,可以直接把 W…

CodeTop之數組中的第K個最大的元素

題目鏈接 215. 數組中的第K個最大元素 - 力扣(LeetCode) 題目解析 算法原理 解法一: 直接理由java內部的排序函數,Arrays.sort()進行排序, 然后我們直接返回第k個最大的元素 nums[nums.length-k] 解法二: 使用堆 我們先把所有元素丟到大根堆里面…

AI任務相關解決方案1-基于NLP的3種模型實現實體識別,以及對比分析(包括基于規則的方法、CRF模型和BERT微調模型)

大家好,我是微學AI,今天給大家介紹一下AI任務相關解決方案1-基于NLP的3種模型實現實體識別,以及對比分析。本文將深入探討三種不同的命名實體識別(NER)方法,包括基于規則的方法、CRF模型和BERT微調模型,用于識別文本中的地名(LOC)、機構名稱(ORG)和人名(PER)實體。通過系統…

IP動態偽裝開關

IP動態偽裝開關 在OpenWrt系統中,IP動態偽裝(IP Masquerading)是一種網絡地址轉換(NAT)技術,用于在私有網絡和公共網絡之間轉換IP地址。它通常用于允許多個設備共享單個公共IP地址訪問互聯網。以下是關于O…

【MySQL】第10節|MySQL全局優化與Mysql 8.0新增特性詳解

全局優化 mysql server參數 1. max_connections(最大連接數) 含義:MySQL 服務允許的最大并發連接數(包括正在使用和空閑的連接)。超過此限制時,新連接會被拒絕(報錯 Too many connections&am…

VS Code 插件 Git History Diff

插件名 進命令行,進Git自己那個分支 查看分支 提交到Git的后想再把另一個也提交到那個分支,用這個命令

Shell腳本中的常用命令

一.設置主機名稱 文件設置 文件開機時已讀取所以要重新進入 命令更改(即使生效) 二.網絡管理命令 1.查看網卡命令 設置網卡 1)DHCP工作模式 2)靜態IP 3)修改網卡信息 三.簡單處理字符 1.打印連續數字 連續打印3個數字 指定打…

C++ 中 std::wstring::c_str() 的潛在風險與安全使用指南

一、問題背景 在開發過程中,我們經常會遇到不同接口之間的數據傳遞問題。例如,當調用某個接口時,需要傳入一個字符串指針作為數據接收的緩沖區,但外圍接口使用的是 std::wstring 類型。此時,如果直接將 std::wstring:…

‘js@https://registry.npmmirror.com/JS/-/JS-0.1.0.tgz‘ is not in this registry

解決方法: 1. npm cache clean --force 2.臨時切換到官方源 npm config set registry https://registry.npmjs.org/ npm install js0.1.0 npm config set registry https://registry.npmmirror.com/ # 切換回鏡像源

ubuntu24 安裝MongoDB-6.0.24 數據庫操作步驟和配置參數說明

目錄 1 下載MongoDB軟件 2 操作系統信息 3 MongoDB 軟件安裝步驟 4 編寫mongodb的配置文件 5 生成keyfile 6 使用mongo用戶啟動mongodb服務 7 設置開機啟動(mongo用戶) 8 安裝MongoDB shell,因為MongoDB-6.0.24 已經移除mongo命令 1 下載MongoDB軟件 https:…

單片機——keil5

文章目錄 安裝教程使用介紹案例展示 接下來進行keil5軟件的相關學習使用 安裝教程 參考視頻鏈接bilibili 51單片機 大約在8分鐘位置處 使用介紹 首先新建project選擇對應的芯片型號(例如:STC89C52 —— 由于STC系列是國產,keil5軟件不支持…

計算機網絡相關發展以及常見性能指標

目錄 一、因特網概述 1.1 基本概念 1.2 因特網發展的三個階段 1.3 英特網服務提供者ISP 1.4 英特網的標準化工作 1.5 因特網的組成 1.6 簡單總結 二、3種交換方式 2.1 電路交換(Circuit Switching) 2.2 分組交換(Packet Switching&…

Java 面試實錄:從Spring到微服務的技術探討

在一個明亮的會議室里,嚴肅的面試官與搞笑的程序員謝飛機正進行一場關于Java技術棧的面試。場景設定在一家知名互聯網大廠,他們的對話充滿了技術性與娛樂性。 第一輪:Spring框架與數據庫 面試官:“謝飛機,能解釋一下…