202535| Kafka架構與重要概念+冪等性+事務

好的!以下是關于 Kafka 架構 以及其 重要概念 的詳細介紹,結合 Mermaid 圖形表格,幫助你更好地理解各個概念的關系和作用。


Kafka 架構與重要概念

Kafka 是一個分布式消息系統,廣泛應用于日志收集、流處理、事件驅動架構等場景。它采用高吞吐量、可擴展的架構,支持多個組件進行數據的發布、訂閱、存儲和消費。

一、Kafka 架構圖(Mermaid 格式)

Topic 分區
發送消息
存儲消息
發送消息
存儲消息
存儲消息
協調與管理
消費消息
消費消息
Partition 0
Leader: Kafka-1
Replica: Kafka-2, Kafka-3
Partition 1
Leader: Kafka-2
Replica: Kafka-1, Kafka-3
Partition 2
Leader: Kafka-3
Replica: Kafka-1, Kafka-2
Producer
Kafka Broker 1
ZooKeeper
Kafka Broker 2
Consumer Group

二、Kafka 重要概念詳細解釋

概念說明
BrokerKafka 服務器節點,負責存儲和管理消息。每個 Broker 處理多個 Topic 和 Partition 的數據讀寫。
ZooKeeper分布式協調服務,Kafka 用它來管理集群的元數據,協調 Broker 狀態,選舉 Leader 等。
Producer消息的生產者,將數據發布到指定的 Topic 中。
Consumer消息的消費者,從 Kafka 中獲取數據并進行處理。
Consumer Group由多個 Consumer 組成,Kafka 會確保每個分區在 Consumer Group 中只被一個消費者消費。
TopicKafka 中的主題,用于組織和分類消息。
Partition每個 Topic 被劃分為多個分區,分區是 Kafka 存儲消息的基本單位。
Replica分區的副本,確保數據的高可用性。每個分區可以有多個副本,其中一個為 Leader。
OffsetKafka 中每條消息在分區內的唯一標識,消費者通過 Offset 來追蹤自己消費的進度。

三、Kafka 架構中的各個組件

1. Broker(Kafka 代理)

  • 定義:Kafka 中的 Broker 是負責存儲消息并處理客戶端請求的節點。每個 Broker 負責多個 Topic 和 Partition 的數據讀寫。
  • 角色:Kafka 集群由多個 Broker 組成,集群中的 Broker 節點共同工作,確保數據的存儲、消費和高可用性。
  • 作用:Broker 接受來自 Producer 的消息,將其存儲在本地磁盤中,并提供 Consumer 按需讀取。

2. ZooKeeper(協調服務)

  • 定義:ZooKeeper 是一個分布式協調服務,用于管理 Kafka 集群的元數據和協調 Broker 的狀態。Kafka 使用 ZooKeeper 來進行 Broker 的注冊、Leader 選舉等管理操作。
  • 作用:它幫助 Kafka 保持一致性、選舉 Leader 和管理集群狀態。ZooKeeper 集群中可以有多個節點,提供高可用性。

3. Producer(生產者)

  • 定義:Producer 是向 Kafka 集群發送消息的客戶端。它將消息發送到指定的 Topic 中。
  • 作用:Producer 可以選擇發送到特定的 Partition,也可以選擇由 Kafka 自動分配 Partition。
  • 分區選擇:Producer 可以通過指定一個 key 來確保某一類消息始終發送到同一個分區,或者由 Kafka 根據負載均衡策略自動選擇。

4. Consumer(消費者)

  • 定義:Consumer 是從 Kafka 中讀取消息并處理的客戶端。它可以訂閱一個或多個 Topic,讀取分區中的消息。
  • 作用:Consumer 從 Kafka 中消費消息,通常會從消息的 Offset 開始讀取。消費者通常會在自己的 Offset 位置繼續消費。

5. Consumer Group(消費組)

  • 定義:Consumer Group 是由多個 Consumer 組成的一組消費者。每個 Consumer Group 內的消費者共同消費同一個 Topic 的消息,但每個分區的消息只有一個消費者消費。
  • 作用:通過消費組,Kafka 可以實現消息的并行消費。每個消費組都會維護自己的 Offset 獨立于其他消費組。

6. Topic(主題)

  • 定義:Topic 是 Kafka 中的消息分類標簽。Producer 將消息發送到特定的 Topic,Consumer 可以訂閱一個或多個 Topic 來消費消息。
  • 作用:Topic 是 Kafka 消息的邏輯分組,可以幫助管理不同種類的消息流。

7. Partition(分區)

  • 定義:每個 Topic 會被劃分成多個 Partition,Partition 是 Kafka 存儲消息的最小單位。每個分區存儲消息的順序,并且每個 Partition 都有一個 Leader 和若干個 Follower 副本。
  • 作用:分區提供了水平擴展的能力,可以增加分區來處理更高的消息吞吐量和并發消費。

8. Replica(副本)

  • 定義:每個分區都有多個副本(Replica),其中一個副本是 Leader,負責處理所有的讀寫請求。其他副本是 Follower,負責同步數據。
  • 作用:副本保證了 Kafka 集群的數據高可用性和容錯性。即使某個 Broker 節點失敗,其他副本仍然可以保證數據不丟失。

9. Offset(偏移量)

  • 定義:Offset 是 Kafka 中每條消息在分區內的唯一標識。每個消費者在消費消息時都會記錄自己的 Offset 位置。
  • 作用:Offset 使得 Kafka 的消息消費具有高可控性。消費者可以從特定的 Offset 開始消費消息,也可以重新從頭消費歷史消息。

Kafka生產者冪等性

Kafka 生產者的冪等性功能是為了保證消息的 一次性寫入。即使在網絡超時、生產者重試等情況下,消息依然能夠保證 只被寫入一次。為了實現這一目標,Kafka 利用一系列機制來控制消息的重復發送,并對每條消息進行唯一標識。

Kafka 生產者冪等性核心概念

  1. Producer ID (PID): 每個 Kafka 生產者實例都會在啟動時獲取一個唯一的 Producer ID。這是 Kafka 用來區分不同生產者的標識符,確保每個生產者發送的消息在 Kafka 集群中都有唯一標識。
  2. Sequence Number (序列號): 每個生產者發送的消息都有一個遞增的序列號,Sequence Number 是 Kafka 用來判定消息是否重復的關鍵參數。序列號的遞增可以確保即使是同一個生產者發送多條消息,Kafka 也能區分它們。
  3. Message Key & Partition: 消息的 Key 用來決定消息將發送到哪個分區,確保同一個 Key 的消息總是發送到同一個分區。分區內的消息順序對于冪等性沒有影響,但消息的重復性檢查依賴于 Producer ID 和 Sequence Number。

生產者冪等性工作流程

為了解釋 Kafka 是如何確保消息不被重復寫入,我們可以將其工作過程分解為幾個步驟:

  1. 生產者初始化
    • 每個生產者在啟動時會向 Kafka 集群申請一個唯一的 Producer ID (PID),并且會從 Kafka 中獲得一個初始的 Sequence Number
    • 生產者為每條發送的消息附上遞增的序列號。
  2. 消息發送
    • 生產者向 Kafka 發送消息時,消息攜帶兩個關鍵字段:Producer IDSequence Number。這些字段幫助 Kafka 區分不同生產者發送的消息,以及同一生產者發送的不同消息。
  3. 消息接收與存儲
    • Kafka Broker 在接收到消息后,會先檢查 Producer IDSequence Number。如果該消息的 Sequence Number 對應的消息已經存在,說明這是一個 重復消息,則 Kafka 會 忽略 該消息,不進行存儲。
    • 如果消息是新的,Kafka 會將其存儲,并將該消息的 Producer IDSequence Number 存儲在元數據中。
  4. 消息重試
    • 在網絡延遲或其他故障的情況下,生產者可能會重試發送相同的消息。由于生產者會附帶相同的 Producer IDSequence Number,Kafka Broker 會識別到這是同一條消息,并 忽略 重試請求,確保消息只被寫入一次。
  5. 消息確認
    • 在消息成功寫入 Kafka 后,Broker 會將寫入成功的確認返回給生產者。若發生故障或超時,生產者會繼續重試,直到成功或者達到重試次數的上限。

Kafka 生產者冪等性詳細流程圖

為了讓你更直觀地理解這一過程,下面是一個更詳細的圖解,展示了生產者發送消息、重試以及如何避免重復消息寫入的流程:

生產者 Kafka Broker ZooKeeper 消費者 生產者啟動時,分配一個唯一的 PID 發送消息(消息 1) PID: 123 Sequence: 0 存儲消息 1 的元數據 傳遞消息 1 網絡延遲或故障,生產者重試發送相同消息 發送消息(消息 1) PID: 123 Sequence: 0 檢查消息 1 是否已存在 消息已存在,重試請求忽略 不發送重復消息 發送消息(消息 2) PID: 123 Sequence: 1 存儲消息 2 的元數據 傳遞消息 2 每條消息的 PID 和 Sequence Number 保證唯一性 生產者的 Sequence Number 在重試時會保持一致,確保冪等性 生產者 Kafka Broker ZooKeeper 消費者

工作原理解讀

1. 生產者啟動時

當生產者啟動時,Kafka 為該生產者分配一個 Producer ID(如 123),并且給該生產者分配一個遞增的 Sequence Number(從 0 開始)。每個消息都攜帶這些信息,確保 Kafka 能識別該生產者的每一條消息。

2. 生產者發送消息(消息 1)

生產者發送 消息 1 到 Kafka 集群,消息的內容包括:Producer ID: 123 和 Sequence Number: 0。Kafka 會根據這個信息將消息存儲并傳遞給消費者。

3. 網絡故障與重試

由于網絡延遲或其他原因,生產者可能會重試發送相同的消息。此時,生產者再次發送 消息 1(Producer ID: 123, Sequence: 0)。Kafka 在收到這條消息時,會檢查消息的 Producer IDSequence Number,發現這條消息已經存在,因此會 忽略 重復的消息。

4. 發送新的消息(消息 2)

當生產者發送 消息 2 時,Sequence Number 增加為 1,Kafka 會識別為新消息,并將其存儲和傳遞給消費者。


Kafka 冪等性實現的關鍵因素

  1. Producer ID (PID)
    • 每個生產者在 Kafka 中都有一個唯一的 Producer ID,它用來標識消息的來源。即使網絡重試,Kafka 也能根據 Producer ID 來區分不同的生產者。
  2. Sequence Number
    • 每個生產者發送的消息都有一個遞增的序列號。這個序列號使 Kafka 能夠區分同一生產者發送的不同消息,確保消息的順序性。
  3. 去重機制
    • Kafka 使用 Producer IDSequence Number 來判斷消息是否重復。如果收到相同 Producer IDSequence Number 的消息,Kafka 會認為這是一條重復消息,進而忽略它。
  4. 跨分區的一致性
    • Kafka 的冪等性機制是 跨分區的,即使消息被發送到多個分區,只要生產者的 Producer IDSequence Number 相同,Kafka 就會確保消息不重復寫入。

生產者冪等性機制的優缺點

優點
  1. 保證消息準確性:即使發生網絡重試、故障等問題,生產者也能保證消息 只寫一次,避免了數據的重復和不一致。
  2. 提升容錯能力:在發生故障或超時的情況下,生產者能夠安全重試,并且 Kafka 會確保不會重復寫入消息,增強了系統的容錯性。
  3. 避免消費者重復消費:冪等性機制確保了消費者不會收到重復的消息,避免了重復消費和數據錯誤。
缺點
  1. 性能開銷:啟用冪等性會增加一定的性能開銷,尤其在高吞吐量的場景下,Kafka 需要進行更多的檢查和存儲操作來確保消息唯一性。
  2. 對多生產者的支持有限:冪等性機制僅對單一生產者實例有效,不同生產者間無法共享冪等性狀態。

Kafka 生產者冪等性配置示例

以下是一個典型的 Kafka 生產者配置,啟用了冪等性功能:

java復制編輯
Properties properties = new Properties();
properties.put("bootstrap.servers", "localhost:9092");
properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");// 啟用冪等性
properties.put("acks", "all");  // 等待所有副本確認
properties.put("retries", Integer.MAX_VALUE);  // 設置最大重試次數為最大值
properties.put("max.in.flight.requests.per.connection", 1);  // 防止并發請求導致亂序
properties.put("enable.idempotence", "true");  // 啟用冪等性KafkaProducer<String, String> producer = new KafkaProducer<>(properties);
配置詳解
  1. acks=all:等待所有副本確認后才返回確認,提供了最佳的消息可靠性。
  2. retries=Integer.MAX_VALUE:允許生產者無限次重試,直到成功。通過冪等性機制,Kafka 確保即使消息重試,也不會重復寫入。
  3. max.in.flight.requests.per.connection=1:為了確保消息的順序性,生產者一次只允許發送一個未確認的消息。
  4. enable.idempotence=true:啟用冪等性,確保消息只寫一次,即使發生重試,消息也不會重復。

KafKa事務

Kafka 事務簡介

Kafka 的事務是一個強大的特性,它允許用戶將多個消息的發送操作封裝在一個 原子操作 中。通過事務,生產者可以確保多條消息的發送要么全部成功,要么全部失敗。Kafka 的事務能夠保證數據一致性,特別是在分布式環境下,避免了部分消息寫入而其他消息丟失的問題。

Kafka 事務不僅僅用于生產者,也為消費者提供了 精確一次消費(Exactly Once Semantics, EOS)的能力。事務在 Kafka 中的應用解決了消息重復消費和漏消費的難題,提升了消息流的可靠性。


Kafka 事務的核心特點

  1. 原子性(Atomicity): Kafka 事務保證一組消息的發送要么全部成功,要么全部失敗。若消息在事務內的某些操作失敗,那么整個事務會被回滾,確保消息的原子性。
  2. 可靠性(Durability): 一旦事務提交,Kafka 會保證消息持久化,并且可以恢復事務內的消息。
  3. 一致性(Consistency): Kafka 確保事務內的消息要么全都提交,要么全都回滾,避免了數據不一致的情況。
  4. 隔離性(Isolation): Kafka 確保事務內的消息在事務提交之前對消費者是不可見的。即消費者只能看到已經提交的消息,未提交的事務消息對消費者是不可見的。

Kafka 事務的實現

Kafka 使用以下兩種類型的標記來管理事務:

  • 事務開始:生產者發出開始事務的信號,所有后續發送的消息都屬于這個事務。
  • 事務提交:生產者發出提交事務的信號,Kafka 將事務中的所有消息持久化,確保消息可供消費者讀取。
  • 事務中止(回滾):如果生產者遇到錯誤并決定放棄事務,可以發出中止事務的信號,所有事務內的消息都不會被提交。

Kafka 會在事務日志中記錄每個事務的狀態。事務狀態包括提交、回滾或未決(進行中)。


Kafka 事務的關鍵配置

  1. acks
    • 設置為 all,確保所有副本都確認消息,以提高消息可靠性和容錯性。
  2. transactional.id
    • 這是 Kafka 生產者的一個關鍵配置,標識一個生產者實例的事務標識符。每個事務性生產者都需要設置這個唯一的標識符,以便 Kafka 能追蹤事務狀態。
  3. retries
    • 在事務中,重試機制非常重要,設置 retries 可以確保生產者在事務中的消息如果失敗,可以重試。
  4. transaction.timeout.ms
    • 這個配置用于設置事務的超時時間,默認值是 60000 毫秒。若一個事務未在指定時間內提交或回滾,Kafka 會認為事務超時并自動中止事務。
  5. enable.idempotence
    • 在啟用事務的同時,還需要啟用冪等性,這樣可以確保即使在網絡中斷或生產者重試的情況下,也不會重復發送相同的消息。

Kafka 事務的生產者使用流程

  1. 開啟事務: 在生產者代碼中,需要使用 beginTransaction() 方法顯式地開始一個事務。
  2. 發送消息: 在事務中發送消息時,所有發送的消息都會被標記為事務的一部分,直到事務被提交或回滾。
  3. 提交事務: 通過 commitTransaction() 方法提交事務,Kafka 會將事務中的所有消息持久化。
  4. 回滾事務: 如果在事務過程中發生了錯誤,生產者可以使用 abortTransaction() 方法回滾事務,所有未提交的消息都不會被持久化。

事務的生產者代碼示例

以下是一個使用 Kafka 事務的 Java 代碼示例,演示如何開啟事務、發送消息并提交事務。

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("acks", "all");
props.put("retries", Integer.MAX_VALUE);
props.put("transactional.id", "my-transaction-id");// 創建 KafkaProducer 實例
KafkaProducer<String, String> producer = new KafkaProducer<>(props);try {// 開始事務producer.beginTransaction();// 發送消息producer.send(new ProducerRecord<>("my-topic", "key1", "value1"));producer.send(new ProducerRecord<>("my-topic", "key2", "value2"));// 提交事務producer.commitTransaction();
} catch (ProducerFencedException | OutOfMemoryError | KafkaException e) {// 在發生異常時回滾事務producer.abortTransaction();
} finally {producer.close();
}

代碼解釋:

  1. 初始化生產者:配置 bootstrap.serversacks 等基本參數,并設置 transactional.id 來啟用事務。
  2. 開始事務:通過 beginTransaction() 方法啟動一個事務。
  3. 發送消息:消息會被添加到當前事務中,直到事務提交或回滾。
  4. 提交事務commitTransaction() 方法將事務中的所有消息持久化到 Kafka 集群中。
  5. 異常處理和回滾:如果發生異常(如網絡中斷、寫入失敗等),調用 abortTransaction() 方法回滾事務,確保事務內的消息不被寫入。

Kafka 事務的消費者

Kafka 的事務不僅對生產者有效,還影響消費者的行為。啟用事務后,消費者只能看到已經提交的消息,這意味著未提交的事務對消費者是不可見的。這保證了 精確一次消費(Exactly Once Semantics,EOS),確保消費者不會消費到重復或不完整的數據。

消費者的事務性讀取:
  • 如果消費者消費到一個尚未提交的消息,它會等待直到該消息所在的事務提交。
  • 如果事務被回滾,消費者不會讀取到該事務中的消息。
啟用精確一次消費:

為了啟用精確一次的消費,消費者需要設置 isolation.level 配置項,通常設置為 read_committed,這意味著消費者只會讀取已提交的消息。

Properties consumerProps = new Properties();
consumerProps.put("bootstrap.servers", "localhost:9092");
consumerProps.put("group.id", "my-consumer-group");
consumerProps.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
consumerProps.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
consumerProps.put("isolation.level", "read_committed");KafkaConsumer<String, String> consumer = new KafkaConsumer<>(consumerProps);
consumer.subscribe(Collections.singletonList("my-topic"));while (true) {ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000));for (ConsumerRecord<String, String> record : records) {System.out.println("Consumed: " + record.value());}
}

總結:Kafka 事務的優勢

  1. 消息的原子性:保證一組消息的發送操作要么完全成功,要么完全失敗。避免了部分消息寫入成功而其他消息丟失的情況。
  2. 精確一次語義(EOS):通過生產者事務和消費者的事務性讀取,Kafka 提供了精確一次的消息傳遞語義,確保數據的一致性。
  3. 高可靠性:在分布式環境下,事務能夠確保即使在故障和重試的情況下,數據不會重復或者丟失,保證了消息傳遞的可靠性。
  4. 簡化消費者邏輯:啟用事務后,消費者無需額外的邏輯去處理重復數據,Kafka 會自動保證消費者只處理已提交的消息。

通過 Kafka 事務,用戶可以構建更加穩定和一致的數據流系統,尤其適用于金融、訂單等要求高數據一致性的場景。

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

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

相關文章

從0開始學習大模型--Day05--理解prompt工程

提示詞工程原理 N-gram&#xff1a;通過統計&#xff0c;計算N個詞共同出現的概率&#xff0c;從而預測下一個詞是什么。 深度學習模型&#xff1a;有多層神經網絡組成&#xff0c;可以自動從數據中學習特征&#xff0c;讓模型通過不斷地自我學習不斷成長&#xff0c;直到模型…

Amazing晶焱科技:系統級 EOS 測試方法 - System Level EOS Testing Method

系統上常見的EOS測試端口以AC電源、電話線&#xff08;RJ11&#xff09;、同軸電纜&#xff08;coaxial cable&#xff09;以及以太網絡&#xff08;RJ45&#xff09;最常見&#xff0c;這些端口因有機會布線至戶外的關系&#xff0c;受到EOS/Surge沖擊的幾率也大大提升。因此電…

數據結構—(概述)

目錄 一 數據結構&#xff0c;相關概念 1. 數據結構&#xff1a; 2. 數據(Data): 3. 數據元素(Data Element): 4. 數據項&#xff1a; 5. 數據對象(Data Object): 6. 容器&#xff08;container&#xff09;&#xff1a; 7. 結點&#xff08;Node&#xff09;&#xff…

Vue 兩種導航方式

目錄 一、聲明式導航 二、編程式導航 三、兩句話總結 一、聲明式導航 1. 傳參跳轉&#xff1a; <router-link :to"/user?nameCHEEMS&id114514">Query傳參 </router-link><router-link :to"/user?參數名1參數值1&參數名2參數值2&a…

QTableWidget實現多級表頭、表頭凍結效果

最終效果&#xff1a; 實現思路&#xff1a;如果只用一個表格的話寫起來比較麻煩&#xff0c;可以考慮使用兩個QTableWidget組合&#xff0c;把復雜的表頭一個用QTableWidget顯示&#xff0c;其他內容用另一個QTableWidget。 #include "mainwindow.h" #include &qu…

2025年客運從業資格證備考單選練習題

客運從業資格證備考單選練習題 1、從事道路旅客運輸活動時&#xff0c;應當采取必要措施保證旅客的人身和財產安全&#xff0c;發生緊急情況時&#xff0c;首先應&#xff08; &#xff09;。 A. 搶救財產 B. 搶救傷員 C. 向公司匯報 答案&#xff1a;B 解析&#xff1a;…

python打卡day21

常見的降維算法 知識點回顧&#xff1a; LDA線性判別PCA主成分分析t-sne降維 之前學了特征降維的兩個思路&#xff0c;特征篩選&#xff08;如樹模型重要性、方差篩選&#xff09;和特征組合&#xff08;如SVD/PCA&#xff09;。 現在引入特征降維的另一種分類&#xff1a;無/有…

專業級軟件卸載工具:免費使用,徹底卸載無殘留!

在數字生活節奏日益加快的今天&#xff0c;我們的電腦就像每天都在"吃進"各種軟件。但您是否注意到&#xff0c;那些看似消失的程序其實悄悄留下了大量冗余文件&#xff1f;就像廚房角落里積攢的調味瓶空罐&#xff0c;日積月累就會讓系統變得"消化不良"。…

【Linux】基礎 IO(一)

&#x1f4dd;前言&#xff1a; 這篇文章我們來講講Linux——基礎IO主要包括&#xff1a; 文件基本概念回顧 C文件的操作介紹系統關于文件的基本操作 &#x1f3ac;個人簡介&#xff1a;努力學習ing &#x1f4cb;個人專欄&#xff1a;Linux &#x1f380;CSDN主頁 愚潤求學 …

Java 原生實現代碼沙箱之Java 程序安全控制(OJ判題系統第2期)——設計思路、實現步驟、代碼實現

在看這一期之前&#xff0c;需要先看上一期的文章&#xff1a; Java 原生實現代碼沙箱&#xff08;OJ判題系統第1期&#xff09;——設計思路、實現步驟、代碼實現-CSDN博客 Java 程序可能出現的異常情況 1、執行超時 占用時間資源&#xff0c;導致程序卡死&#xff0c;不釋…

常見的降維算法

作業&#xff1a; 自由作業&#xff1a;探索下什么時候用到降維&#xff1f;降維的主要應用&#xff1f;或者讓ai給你出題&#xff0c;群里的同學互相學習下。可以考慮對比下在某些特定數據集上t-sne的可視化和pca可視化的區別。 一、什么時候用到降維&#xff1f; 降維通常…

理解Yocto項目中`${D}`作為模擬目標系統根文件結構的臨時目錄

在Yocto項目中,理解${D}作為模擬目標系統根文件結構的臨時目錄,可以通過以下具象化的比喻和結構解析來把握其核心邏輯: 一、沙盒模型:構建系統的“實驗場地” ${D}的作用類似于建筑師在施工前搭建的1:1實體模型。它完全模仿目標設備的文件系統布局(如/usr/bin、/etc等目錄…

第十課認識約數

課堂學習&#xff1a; 情景引入&#xff1a; 今天我們來認識一下數學中的約數關系&#xff0c;上節課我們了解完倍數之后就已經對約數有了基本的概念&#xff01; 我們按照是否有余數&#xff0c;可以把他們分成兩類 在整數除法中&#xff0c;如果商是整數沒有余數&#x…

【Vue】vuex的getters mapState mapGetters mapMutations mapActions的使用

目錄 一、getters 二、 mapState 三、 mapGetters 四、 mapMutations 五、 mapActions 學到這兒來個小總結&#xff1a;四個map方法的使用 總結不易~ 本章節對我有很大的收獲&#xff0c; 希望對你也是&#xff01;&#xff01;&#xff01; 本節素材已上傳至Gitee&…

html object標簽介紹(用于嵌入外部資源通用標簽)(已不推薦使用deprecated,建議使用img、video、audio標簽)

文章目錄 HTML <object> 標簽詳解基本語法與核心屬性關鍵屬性解析1. **data**2. **type**3. **width & height**4. **name** 嵌入不同類型的資源1. **嵌入圖像**2. **嵌入音頻**3. **嵌入視頻**4. **嵌入 PDF** 參數傳遞與回退內容**參數&#xff08;<param>&a…

警備,TRO風向預警,In-N-Out Burgers維權風暴來襲

本案是TME律所代理的5月首案&#xff0c;傳奇連鎖快餐品牌In-N-Out Burgers委托維權&#xff01; 案件基本情況&#xff1a; 起訴時間&#xff1a;2025-5-1 案件號&#xff1a;25-cv-04767 品牌&#xff1a;In-N-Out 原告&#xff1a;In-N-Out Burgers 原告律所&#xff…

數據結構算法習題通關:樹遍歷 / 哈夫曼 / 拓撲 / 哈希 / Dijkstra 全解析

已知一棵二叉樹先序遍歷和中序遍歷分別為 ABDEGCFH 和 DBGEACHF&#xff0c;請畫出這個二叉樹的邏輯結構并寫出后序遍歷的序列。 先序遍歷&#xff1a;ABDEGCFH 中序遍歷&#xff1a;DBGEACHF 先序遍歷看出根為A&#xff0c;左子樹DBGE&#xff0c;右子樹CHF A的左子樹 再…

C++GO語言微服務和服務發現

目錄 01 03-go-micro簡介 02 04-服務發現的簡單認識 03 05-consul的安裝 04 06-consul常用的命令 05 07-注冊服務到consul并驗證 06 08-consul健康檢查 07 09-consul結合grpc使用-上&#xff08;只實現grpc遠程調用&#xff09; 08 10-consul結合grpc使用-中&#xff08…

HDFS 常用基礎命令詳解——快速上手分布式文件系統

簡介&#xff1a; 本文面向剛接觸 Hadoop HDFS&#xff08;Hadoop 分布式文件系統&#xff09;的讀者&#xff0c;結合 CSDN 博客風格&#xff0c;系統梳理最常用的 HDFS 客戶端命令&#xff0c;并配以示例和注意事項&#xff0c;幫助你在開發和運維中快速掌握 HDFS 的文件管理…

VUE CLI - 使用VUE腳手架創建前端項目工程

前言 前端從這里開始&#xff0c;本文將介紹如何使用VUE腳手架創建前端工程項目 1.預準備&#xff08;編輯器和管理器&#xff09; 編輯器&#xff1a;推薦使用Vscode&#xff0c;WebStorm&#xff0c;或者Hbuilder&#xff08;適合剛開始練手使用&#xff09;&#xff0c;個…