Kafka事務是怎么實現的?Kafka事務消息原理詳解

在這里插入圖片描述

目錄

    • 一、Kafka事務性消息
      • 1.1 介紹Kafka事務性消息
      • 1.2 事務性消息的應用場景
      • 1.3 Kafka事務性消息的優勢
    • 二、Kafka事務性消息的使用
      • 2.1 配置Kafka以支持事務性消息
        • 生產者配置
        • 消費者配置
      • 2.2 生產者:發送事務性消息
        • 創建Kafka生產者
        • 開始事務
        • 發送消息
        • 提交或中止事務
      • 2.3 消費者:處理事務性消息
        • 創建 Kafka 消費者
        • 訂閱主題
        • 處理消息
        • 提交位移
    • 三、事務性消息的最佳實踐
      • 3.1 保障消息的一次交付
        • 3.1.1 生產者冪等性
        • 3.1.2 消費者去重
      • 3.2 事務性消息的監控和故障排查
        • 3.2.1 監控工具
        • 3.2.2 故障排查
      • 3.3 事務性消息的性能考量
        • 3.3.1 性能調整
        • 3.3.2 吞吐量優化
    • 四、示例:生產和消費Kafka事務性消息
      • 4.1 示例1:生產事務性消息
        • 示例1代碼:生產者
        • 代碼說明:
      • 4.2 示例2:消費事務性消息
        • 示例2代碼:消費者
        • 代碼說明:
    • 五、總結
      • Kafka系列文章:

大家好,我是哪吒。

前兩天,有個朋友去面試,被問到Kafka事務的問題。

她的第一反應是:

我是來面試Java的,怎么問我大數據的Kafka?

在這里插入圖片描述

不過Kafka確實是Java程序員必備的中間件技術了,這點是毋庸置疑的。

在這里插入圖片描述

Kafka幾乎是當今時代背景下數據管道的首選,無論你是做后端開發、還是大數據開發,對它可能都不陌生。開源軟件Kafka的應用越來越廣泛。

面對Kafka的普及和學習熱潮,哪吒想分享一下自己多年的開發經驗,帶領讀者比較輕松地掌握Kafka的相關知識

上一節我們說到了解密Kafka主題的分區策略:提升實時數據處理的關鍵,今天系統的說一下Kafka的事務,實現步步為營,逐個擊破,拿下Kafka。

在當今大數據時代,數據的可靠性和一致性變得至關重要。Kafka作為一個分布式流數據平臺,強調了實時數據的高吞吐量傳輸,而Kafka事務性消息則在這個過程中發揮了至關重要的作用。

本文將詳細介紹Kafka事務性消息,探究它們如何確保數據一致性,以及在各種應用場景中的應用。

一、Kafka事務性消息

1.1 介紹Kafka事務性消息

Kafka事務性消息是一項關鍵的功能,為確保數據一致性提供了重要的支持。在本部分,我們將深入了解Kafka事務性消息的基本概念。

Kafka事務性消息的概念

在這里插入圖片描述

Kafka事務性消息是一種機制,用于確保消息的可靠性傳遞和處理。與非事務性消息相比,它們在數據處理中提供了額外的保證。一旦消息被寫入Kafka集群,它們將被認為是已經處理,無論發生了什么。

為什么需要事務性消息?

在這里插入圖片描述

事務性消息對于確保數據一致性至關重要。在某些應用程序中,消息的完整性和可靠性至關重要。如果在消息處理期間發生故障,如何保證消息不會丟失或重復是一個復雜的問題。Kafka事務性消息提供了解決這些問題的方式,使得消息處理更加可控和可靠。

事務性消息的特性

Kafka事務性消息具有以下關鍵特性:

在這里插入圖片描述

  • 原子性:事務性消息要么完全成功,要么完全失敗。這確保了消息不會被部分處理。

  • 可靠性:一旦消息被寫入Kafka,它們將被視為已經處理,即使發生了應用程序或系統故障。

  • 順序性:事務性消息在單個分區內保持順序。這對于需要按順序處理的應用程序至關重要。

  • 冪等性:Kafka生產者可以配置為冪等,確保相同的消息不會被重復發送。

  • Exactly Once語義:事務性消息支持"僅一次"語義,即消息要么完全到達一次,要么不到達。

本節的目標是幫助您理解Kafka事務性消息的核心概念。接下來,我們將探討它們的應用場景以及相對于非事務性消息的優勢。

1.2 事務性消息的應用場景

事務性消息在多種應用場景中發揮著關鍵作用。以下是一些常見的應用場景,其中事務性消息特別有用:

金融交易處理:在金融領域,每筆交易都必須具備原子性,確保不發生不一致或重復的交易。事務性消息可用于記錄和處理金融交易,保證交易的完整性。

訂單處理:在電子商務平臺上,訂單處理必須是可靠的,以確保訂單的創建、支付和發貨不會出現問題。事務性消息可用于跟蹤和處理訂單的不同階段,從而確保訂單流程的一致性。

庫存管理:對于企業,庫存管理是至關重要的。事務性消息可用于跟蹤庫存的變化,以確保庫存的準確性和可靠性。

日志記錄:在大數據和日志記錄應用中,日志的完整性是至關重要的。事務性消息可用于確保日志的完整性,即使在日志處理集群發生故障時也能保持一致性。

系統通知:對于需要向用戶發送通知或提醒的應用程序,確保通知的可靠發送至關重要。事務性消息可用于實現這一目標。

1.3 Kafka事務性消息的優勢

相對于非事務性消息,Kafka事務性消息具有明顯的優勢,特別是在需要數據一致性的應用場景中。以下是Kafka事務性消息的優勢:

數據一致性:事務性消息可確保消息要么被完全處理,要么不被處理。這消除了數據處理中的不一致性,有助于維護數據一致性。

可靠性:一旦消息被寫入Kafka,它們將被視為已經處理,即使發生了應用程序或系統故障。這確保了消息的可靠傳遞。

冪等性:Kafka生產者可以配置為冪等,這意味著相同的消息不會被重復發送。這有助于減少不必要的消息傳遞,避免數據重復。

Exactly Once語義:事務性消息支持"僅一次"語義,即消息要么完全到達一次,要么不到達。這是某些應用程序所需的高級語義。

錯誤處理:事務性消息提供了一種處理錯誤的機制,以確保消息可以被恢復或重試,而不會丟失。

在這里插入圖片描述

二、Kafka事務性消息的使用

在這一部分,我們將深入研究如何使用Kafka事務性消息來確保數據的一致性。

2.1 配置Kafka以支持事務性消息

配置Kafka以支持事務性消息對于確保消息在傳遞和處理過程中的一致性非常重要。在本節中,我們將詳細討論如何配置Kafka以支持事務性消息,包括生產者和消費者的設置。

生產者配置

在生產者端,需要進行一些特定的配置以啟用事務性消息。以下是一些關鍵的配置參數:

  • acks:這是有關生產者接收到確認之后才認為消息發送成功的設置。對于事務性消息,通常將其設置為acks=all,以確保消息僅在事務完全提交后才被視為成功發送。

  • transactional.id:這是用于標識生產者實例的唯一ID。在配置文件中設置transactional.id是啟用事務性消息的關鍵步驟。

  • enable.idempotence:冪等性是指相同的消息不會被重復發送。對于事務性消息,通常將其設置為enable.idempotence=true,以確保消息不會重復發送。

配置示例:

acks=all
transactional.id=my-transactional-id
enable.idempotence=true
消費者配置

在消費者端,同樣需要進行適當的配置以確保正確處理事務性消息。以下是一些消費者的重要配置參數:

  • isolation.level:這是用于控制消費者的隔離級別的設置。對于事務性消息,通常將其設置為isolation.level=read_committed,以確保只讀取已經提交的事務消息。

  • auto.offset.reset:這是消費者啟動時從哪里開始讀取消息的設置。通常將其設置為auto.offset.reset=earliest,以確保不會錯過任何已提交的消息。

配置示例:

isolation.level=read_committed
auto.offset.reset=earliest

配置Kafka以支持事務性消息是確保消息可靠傳遞和處理的關鍵步驟。這些配置設置可以確保在生產和消費事務性消息時的正確行為。

2.2 生產者:發送事務性消息

在這一部分,我們將深入研究如何使用Kafka生產者來發送事務性消息。發送事務性消息是確保數據一致性的關鍵步驟,需要特別小心。以下是詳細的步驟和示例:

創建Kafka生產者

首先,我們需要創建一個 Kafka 生產者的實例。這個生產者實例將負責將消息發送到 Kafka 主題。創建生產者需要配置參數,包括 Kafka 集群的地址、消息的鍵和值的序列化器、事務ID 等。

下面是一個創建 Kafka 生產者的示例:

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerConfig;
import java.util.Properties;public class MyKafkaProducer {public static Producer<String, String> createProducer() {Properties properties = new Properties();properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");properties.put(ProducerConfig.TRANSACTIONAL_ID_CONFIG, "my-transactional-id");return new KafkaProducer<>(properties);}
}
開始事務

在準備發送事務性消息之前,我們需要明確地開始一個事務。這通過調用 beginTransaction 方法來實現。一旦事務開始,所有后續的消息發送將包含在這個事務中。

producer.beginTransaction();
發送消息

在事務內,我們可以開始發送消息。這些消息將被包含在事務中,只有在事務成功提交時才會真正寫入 Kafka 主題。

producer.send(new ProducerRecord<>("my-topic", "key1", "value1"));
producer.send(new ProducerRecord<>("my-topic", "key2", "value2"));
提交或中止事務

事務性消息的一個關鍵特性是它們要么完全成功,要么完全失敗。因此,在消息發送后,我們需要根據消息的處理結果來決定是提交事務還是中止事務。這可以通過調用 commitTransactionabortTransaction 方法來實現。

try {producer.commitTransaction();
} catch (ProducerFencedException | OutOfOrderSequenceException | AuthorizationException e) {// 處理異常,通常中止事務并重試producer.close();
} catch (CommitFailedException e) {// 事務提交失敗,通常中止事務并重試producer.close();
}

上述步驟提供了一個基本的示例,演示如何使用 Kafka 生產者發送事務性消息。事務性消息的發送確保了消息的可靠性和一致性,尤其在需要原子性保證的情況下非常有用。

2.3 消費者:處理事務性消息

在這一部分,我們將深入研究如何使用 Kafka 消費者來處理事務性消息。正確處理事務性消息對于保證數據一致性至關重要。以下是詳細的步驟和示例:

創建 Kafka 消費者

首先,我們需要創建一個 Kafka 消費者的實例。這個消費者實例將負責從 Kafka 主題中讀取消息。創建消費者需要配置參數,包括 Kafka 集群的地址、消息的鍵和值的反序列化器、消費者組 ID 等。

下面是一個創建 Kafka 消費者的示例:

import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import java.time.Duration;
import java.util.Collections;
import java.util.Properties;public class MyKafkaConsumer {public static Consumer<String, String> createConsumer() {Properties properties = new Properties();properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");properties.put(ConsumerConfig.GROUP_ID_CONFIG, "my-consumer-group");properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");return new KafkaConsumer<>(properties);}
}
訂閱主題

消費者需要明確地訂閱包含事務性消息的主題。這通過調用 subscribe 方法來實現。一旦訂閱,消費者將開始接收該主題上的消息。

consumer.subscribe(Collections.singletonList("my-topic"));
處理消息

一旦事務性消息到達,消費者需要確保消息被正確處理。這通常涉及到處理消息的邏輯,確保數據的一致性。處理消息的邏輯將根據具體的應用和需求而異。

ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records) {String key = record.key();String value = record.value();// 處理消息的邏輯
}
提交位移

消費者需要負責提交消息的位移,以便正確跟蹤已處理的消息。這通過調用 commitSynccommitAsync 方法來實現。位移的提交確保了消息不會被重復處理。

consumer.commitSync();

上述步驟提供了一個基本的示例,演示了如何使用 Kafka 消費者處理事務性消息。消費者的正確配置和消息處理確保了消息的可靠性和一致性。在實際應用中,處理消息的邏輯將更加復雜,以滿足特定的需求。

在這里插入圖片描述

三、事務性消息的最佳實踐

在這一節,我們將提供一些關于如何使用Kafka事務性消息的最佳實踐。這包括如何確保消息的一次交付、監控和故障排查以及性能優化。

3.1 保障消息的一次交付

3.1.1 生產者冪等性

確保生產者的冪等性是關鍵,以防止消息被重復發送。以下是一些關鍵策略和實踐,可用于確保生產者的冪等性:

1. 分配唯一消息ID: 為每條消息分配一個唯一的消息ID。這可以是全局唯一的,也可以是特定于主題的唯一。在發送消息之前,生產者可以檢查已經發送的消息記錄,以確保當前消息的ID不重復。

2. 使用冪等性API: Kafka 提供了冪等性的生產者 API。你可以在生產者配置中啟用冪等性,設置 enable.idempotence=true,以確保消息在發送時不會被重復處理。

3. 實現自定義冪等性: 在一些情況下,自定義實現冪等性邏輯可能是必要的。這可以涉及到在消息處理端的數據庫或存儲中跟蹤已處理消息的狀態,以確保消息不會被重復處理。

4. 設置適當的重試機制: 如果消息發送失敗,生產者應該具備適當的重試機制,以確保消息最終被成功發送。重試機制需要在生產者的配置中進行設置。

3.1.2 消費者去重

保障消息不會被重復處理同樣至關重要。以下是一些策略和最佳實踐,可用于實現消費者的去重:

1. 冪等性消息處理邏輯: 消費者的消息處理邏輯應該是冪等的。這意味著無論消息被處理多少次,其結果都應該是相同的。這通常需要在應用程序代碼中進行實施。

2. 消息唯一標識: 為每條消息分配一個唯一的標識符,如消息ID。在處理消息前,消費者可以維護一個記錄已處理消息的數據結構,以確保消息不會被重復處理。

3. 消費者去重過程: 消費者在處理消息前,可以查詢已處理消息的記錄,如果消息已存在于記錄中,可以選擇跳過處理或進行進一步處理。這可以防止消息的重復處理。

4. 消費者庫支持: 一些消息隊列處理庫提供了內置的去重機制,你可以利用這些庫來簡化去重處理。

以上內容提供了詳細的策略和最佳實踐,以確保消息的一次交付。這是保障數據一致性的關鍵步驟,特別適用于事務性消息的處理。這些實踐可以根據具體的應用和需求進行定制化。

3.2 事務性消息的監控和故障排查

3.2.1 監控工具

監控Kafka事務性消息是確保系統的可靠性的重要部分。以下是一些監控工具和策略:

  • Kafka內置指標:Kafka提供了一組內置指標,用于監控事務性消息的性能和狀態。你可以使用這些指標來跟蹤消息的處理情況。

  • 日志文件:Kafka的日志文件包含了詳細的事件信息,可以用于故障排查和性能分析。定期檢查日志文件,以查找潛在的問題。

  • 監控系統:使用專業的監控系統,如Prometheus和Grafana,來建立實時監控和警報。這些系統可以幫助你及時發現問題并采取措施。

3.2.2 故障排查

當事務性消息出現問題時,需要能夠排查和解決這些問題。以下是一些故障排查策略:

  • 日志分析:定期分析Kafka的日志文件,查找異常和錯誤信息。這可以幫助你及早發現問題并采取措施。

  • 監控警報:建立監控警報,以便在出現問題時立即收到通知。這有助于快速響應問題。

  • 版本和配置管理:確保Kafka和應用程序的版本和配置得到正確管理。不同版本或配置的不一致可能導致問題。

3.3 事務性消息的性能考量

性能是任何消息系統的關鍵指標,特別是對于高吞吐量和低延遲的需求。以下是一些性能考量和優化策略:

3.3.1 性能調整
  • 生產者性能調整:通過調整生產者的配置參數,如batch.sizeacks等,可以優化消息發送性能。

  • 消費者性能調整:消費者的性能也可以通過配置參數,如max.poll.recordsfetch.min.bytes等進行調整。

3.3.2 吞吐量優化
  • 分區和并

行度**:合理地選擇分區數量和消費者的并行度,以確保系統能夠處理大量事務性消息。

  • 水平擴展:如果系統負載增加,考慮進行水平擴展,增加Kafka代理和消費者實例,以提高吞吐量。

  • 網絡和存儲優化:確保網絡和存儲基礎設施足夠快,以支持高吞吐量的消息傳遞。

上述最佳實踐策略和性能優化建議可以幫助你更好地使用Kafka事務性消息,確保消息的可靠傳遞和一致性處理,同時滿足性能需求。通過仔細的配置、監控和故障排查,你可以建立一個可靠和高性能的消息處理系統。

四、示例:生產和消費Kafka事務性消息

在這一節,我們將提供兩個示例,詳細展示如何生產和消費Kafka事務性消息。

4.1 示例1:生產事務性消息

示例1代碼:生產者
import org.apache.kafka.clients.producer.*;
import java.util.Properties;public class TransactionalProducerExample {public static void main(String[] args) {String bootstrapServers = "localhost:9092";String topic = "my-transactional-topic";Properties properties = new Properties();properties.put("bootstrap.servers", bootstrapServers);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("enable.idempotence", "true");properties.put("transactional.id", "my-transactional-id");Producer<String, String> producer = new KafkaProducer<>(properties);producer.initTransactions();try {producer.beginTransaction();ProducerRecord<String, String> record = new ProducerRecord<>(topic, "key", "value");producer.send(record);producer.commitTransaction();} catch (ProducerFencedException | OutOfOrderSequenceException | AuthorizationException e) {// Fenced, sequence issue, or authorization exceptionproducer.close();} catch (KafkaException e) {// Handle other exceptionsproducer.close();}producer.close();}
}
代碼說明:
  • 這個示例演示了如何創建一個Kafka生產者,配置它以支持事務性消息,并生產一條事務性消息。
  • transactional.id是一個用于標識生產者事務的唯一ID。它確保了事務性消息的一致性。
  • try塊中,我們使用producer.beginTransaction()來啟動一個事務,然后發送一條消息,最后使用producer.commitTransaction()來提交事務。
  • 如果在事務期間發生異常,我們在catch塊中處理異常并關閉生產者。

4.2 示例2:消費事務性消息

示例2代碼:消費者
import org.apache.kafka.clients.consumer.*;
import java.time.Duration;
import java.util.Collections;
import java.util.Properties;public class TransactionalConsumerExample {public static void main(String[] args) {String bootstrapServers = "localhost:9092";String groupId = "my-consumer-group";String topic = "my-transactional-topic";Properties properties = new Properties();properties.put("bootstrap.servers", bootstrapServers);properties.put("group.id", groupId);properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");Consumer<String, String> consumer = new KafkaConsumer<>(properties);consumer.subscribe(Collections.singletonList(topic));while (true) {ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));for (ConsumerRecord<String, String> record : records) {System.out.printf("Consumed record with key %s and value %s%n", record.key(), record.value());}}}
}
代碼說明:
  • 這個示例演示了如何創建一個Kafka消費者,訂閱一個主題,并消費事務性消息。
  • 消費者將持續輪詢主題以獲取新的消息。
  • 每當有新消息可用時,它將打印出消息的鍵和值。

五、總結

本文深入探討了Kafka事務性消息的關鍵概念、應用場景、優勢、配置、使用以及最佳實踐。在總結中,讓我們再次強調一些關鍵要點,并展望Kafka事務性消息的未來。

  • Kafka事務性消息是一種機制,用于確保消息的可靠性傳遞和處理。它們提供了額外的保證,確保消息要么完全成功,要么完全失敗。
  • 應用場景:Kafka事務性消息在金融交易、庫存管理、訂單處理等需要高可靠性和數據一致性的應用中發揮關鍵作用。
  • 優勢:事務性消息相對于非事務性消息提供了更高的數據一致性和可靠性,支持原子性、冪等性和"僅一次"語義。
  • 配置:配置Kafka以支持事務性消息包括生產者和消費者的設置,如transactional.idenable.idempotence等。
  • 生產事務性消息:使用Kafka生產者,需要初始化事務、發送消息,然后提交或中止事務,以確保消息的一致性。
  • 消費事務性消息:使用Kafka消費者,需要訂閱主題并持續輪詢以獲取消息,然后確保消息被正確處理。
  • 最佳實踐:最佳實踐包括保障消息的一次交付、監控和故障排查以及性能考量,以確保系統的穩定性和高性能。

Kafka系列文章:

Kafka批處理與流處理詳解

解密Kafka主題的分區策略:提升實時數據處理的關鍵


🏆哪吒多年工作總結:Java學習路線總結,搬磚工逆襲Java架構師


在這里插入圖片描述

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

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

相關文章

logstash之grok插件自定義規則學習

文章目錄 1、前言2、Grok提供的常用Patterns說明及舉例2.1 常用的表達式說明 3、使用grok插件進行日志字段處理4、案例1&#xff1a;處理nginx的日志4.1、查看nginx日志格式4.2、對nginx的日志進行過濾處理 5、案例2&#xff1a;處理tomcat的日志5.1、[安裝logstash-filter-mul…

外包干了3個月,技術退步明顯.......

先說一下自己的情況&#xff0c;大專生&#xff0c;18年通過校招進入武漢某軟件公司&#xff0c;干了接近4年的功能測試&#xff0c;今年年初&#xff0c;感覺自己不能夠在這樣下去了&#xff0c;長時間呆在一個舒適的環境會讓一個人墮落! 而我已經在一個企業干了四年的功能測…

【MySQL】在 Centos7 環境下安裝 MySQL

環境搭建 一、檢查環境二、檢查系統安裝包三、安裝 mysql yum 源四、安裝 mysql 服務五、啟動服務六、登錄 mysql七、配置 my.cnf 注意&#xff0c;我們搭建的 mysql 環境是在 Linux 的 Centos7 環境下安裝的~ 一、檢查環境 注意&#xff0c;我們在安裝和卸載中&#xff0c;先…

pytorch 中 drop_last與 nn.Parameter

1. drop_last 在使用深度學習&#xff0c;pytorch 的DataLoader 中&#xff0c; from torch.utils.data import DataLoader# Define your dataset and other necessary configurations # Create DataLoader train_loader DataLoader(dataset, batch_sizebatch_size, drop_la…

vue項目列表跳轉詳情返回列表頁保留搜索條件

需求 列表進入詳情后&#xff0c;返回詳情的時候保留搜索的條件&#xff0c;第幾頁進入的返回還在第幾頁 1.在詳情頁設置定義一個字段 mounted() {sessionStorage.setItem("msgInfo", true);},2.在獲取列表數據的時候在mounted里面判斷定義的字段 if (sessionStor…

【EI會議征稿】第二屆純數學、應用數學與計算數學國際學術會議(PACM 2024)

第二屆純數學、應用數學與計算數學國際學術會議&#xff08;PACM 2024&#xff09; 2024 2nd International Cnference on Pure, Applied and Computational Mathematics (PACM 2024) 第二屆純數學、應用數學計算數學國際學術會議 (PACM2024) 將于2024年1月19-21日在中國廈門隆…

報錯:AttributeError: ‘DataFrame‘ object has no attribute ‘reshape‘

這個錯誤通常發生在你試圖在 Pandas DataFrame 上直接使用 reshape 方法時。reshape 方法通常與 NumPy 數組相關聯&#xff0c;而不是 Pandas DataFrame。 如果你正在使用 Pandas DataFrame 并希望重新塑造它&#xff0c;你應該使用 Pandas 的重塑函數&#xff0c;如 pivot、m…

linux常用命令大全50個Linux常用命令

Linux有許多常用的命令&#xff0c;這些命令可以用來管理文件、運行程序、查看系統狀態等。以下是一些常用的Linux命令&#xff1a; pwd&#xff1a;顯示當前所在的工作目錄的全路徑名稱。cd&#xff1a;用于更改當前工作目錄&#xff0c;例如&#xff0c;若要進入Documents目…

UE5 樹葉飄落 學習筆記

一個Plane是由兩個三角形構成的&#xff0c;所以World Position Offset&#xff0c;只會從中間這條線折疊 所有材質 這里前幾篇博客有說這種邏輯&#xff0c;就是做一個對稱的漸變數值 這里用粒子的A值來做樹葉折疊的程度&#xff0c;當然你也可以用Dynamic Param 這樣就可以讓…

Android 11.0 長按按鍵切換SIM卡默認移動數據

Android 11.0 長按按鍵切換SIM卡默認移動數據 近來收到客戶需求想要通過長按按鍵實現切換SIM卡默認移動數據的功能&#xff0c;該功能主要通過長按按鍵發送廣播來實現&#xff0c;具體修改參照如下&#xff1a; 首先創建廣播&#xff0c;具體修改參照如下&#xff1a; /vend…

麒麟KYLINOS上刪除多余有線連接

原文鏈接&#xff1a;麒麟KYLINOS上刪除多余網絡有線連接 hello&#xff0c;大家好啊&#xff0c;今天我要給大家介紹的是在麒麟KYLINOS操作系統中&#xff0c;如何刪除通過Parallels Desktop虛擬機安裝時產生的多余有線連接。在使用Parallels Desktop虛擬機安裝麒麟桌面操作系…

C/C++ 題目:給定字符串s1和s2,判斷s1是否是s2的子序列

判斷子序列一個字符串是否是另一個字符串的子序列 解釋&#xff1a;字符串的一個子序列是原始字符串刪除一些&#xff08;也可以不刪除&#xff09;字符&#xff0c;不改變剩余字符相對位置形成的新字符串。 如&#xff0c;"ace"是"abcde"的一個子序…

服務器數據恢復—raid5少盤狀態下新建raid5如何恢復原raid5數據?

服務器數據恢復環境&#xff1a; 一臺服務器上搭建了一組由5塊硬盤組建的raid5陣列&#xff0c;服務器上層存放單位重要數據&#xff0c;無備份文件。 服務器故障&分析&#xff1a; 服務器上raid5有一塊硬盤掉線&#xff0c;外聘運維人員在沒有了解服務器具體情況下&#x…

如何在linux中使用rpm管理軟件

本章主要介紹使用rpm對軟件包進行管理。 使用rpm查詢軟件的信息 使用rpm安裝及卸載軟件 使用rpm對軟件進行更新 使用rpm對軟件進行驗證 rpm 全稱是redhat package manager&#xff0c;后來改成rpm package manager&#xff0c;這是根據源 碼包編譯出來的包。先從光盤中拷貝一…

[算法每日一練]-雙指針 (保姆級教程篇 1) #A-B數對 #求和 #元音字母 #最短連續子數組 #無重復字符的最長子串 #最小子串覆蓋 #方塊桶

目錄 A-B數對 解法一&#xff1a;雙指針 解法二&#xff1a;STL二分查找 解法三&#xff1a;map 求和 元音字母 最短連續子數組 無重復字符的最長子串 最小子串覆蓋 方塊桶 雙指針特點&#xff1a;雙指針絕不回頭 A-B數對 解法一&#xff1a;雙指針 先把數列排列成…

《C++新經典設計模式》之第8章 外觀模式

《C新經典設計模式》之第8章 外觀模式 外觀模式.cpp 外觀模式.cpp #include <iostream> #include <memory> using namespace std;// 中間層角色&#xff0c;隔離接口&#xff0c;兩部分模塊通過中間層打交道 // 提供簡單接口&#xff0c;不與底層直接打交道 // 提…

Grounding DINO、TAG2TEXT、RAM、RAM++論文解讀

提示&#xff1a;Grounding DINO、TAG2TEXT、RAM、RAM論文解讀 文章目錄 前言一、Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection1、摘要2、背景3、部分文獻翻譯4、貢獻5、模型結構解讀a.模型整體結構b.特征增強結構c.解碼結構 6、實…

使用Sourcetrail解析C項目

閱讀源碼的工具很多&#xff0c;今天給大家推薦一款別具一格的源碼閱讀神器。 它就是 Sourcetrail&#xff0c;一個免費開源、跨平臺的可視化源碼探索項目 使用

釋放深度學習的力量:使用 CUDA 和 Turing GPU 構建 AI

深度學習是一種人工智能的分支,它使用神經網絡模擬人類大腦的學習過程,從大量的數據中學習特征和規律。深度學習已經徹底改變了無數領域,從圖像和語音識別到自然語言處理和自動駕駛汽車。但是,要充分利用深度學習的強大功能,需要強大的工具,而 NVIDIA 的 Turing GPU 就是…

Faster R-CNN pytorch源碼血細胞檢測實戰(二)數據增強

Faster R-CNN pytorch源碼血細胞檢測實戰&#xff08;二&#xff09;數據增強 文章目錄 Faster R-CNN pytorch源碼血細胞檢測實戰&#xff08;二&#xff09;數據增強1. 資源&參考2. 數據增強2.1 代碼運行2.2 文件存放 3 數據集劃分4. 訓練&測試5. 總結 1. 資源&參…