在現(xiàn)代分布式系統(tǒng)中,確保數(shù)據(jù)處理的準確性和一致性是至關(guān)重要的。Apache Kafka,作為一個廣泛使用的流處理平臺,提供了強大的消息隊列和流處理功能。隨著業(yè)務(wù)需求的增長,Kafka 的事務(wù)消息功能應(yīng)運而生,它允許應(yīng)" />

日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

原理剖析| Kafka Exactly Once 語義實現(xiàn)原理:冪等性與事務(wù)消息

來源: 責(zé)編: 時間:2024-04-28 08:55:47 229觀看
導(dǎo)讀1、前言
在現(xiàn)代分布式系統(tǒng)中,確保數(shù)據(jù)處理的準確性和一致性是至關(guān)重要的。Apache Kafka,作為一個廣泛使用的流處理平臺,提供了強大的消息隊列和流處理功能。隨著業(yè)務(wù)需求的增長,Kafka 的事務(wù)消息功能應(yīng)運而生,它允許應(yīng)

1、前言   

xmu28資訊網(wǎng)——每日最新資訊28at.com

在現(xiàn)代分布式系統(tǒng)中,確保數(shù)據(jù)處理的準確性和一致性是至關(guān)重要的。Apache Kafka,作為一個廣泛使用的流處理平臺,提供了強大的消息隊列和流處理功能。隨著業(yè)務(wù)需求的增長,Kafka 的事務(wù)消息功能應(yīng)運而生,它允許應(yīng)用程序以一種原子的方式處理消息,即要么所有消息都被正確處理,要么都不處理。本文將深入剖析 Kafka 的 Exactly-Once 語義實現(xiàn)原理,包括冪等性與事務(wù)消息的關(guān)鍵概念,以及它們是如何在 Kafka 中實現(xiàn)的。我們將探討 Kafka 事務(wù)的流程,事務(wù)提供的 ACID 保證,以及在實際應(yīng)用中可能遇到的一些限制。無論您是 Kafka 的新手還是經(jīng)驗豐富的開發(fā)者,本文都將為您提供有價值的見解和指導(dǎo)。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

2、消息隊列的事務(wù)場景

xmu28資訊網(wǎng)——每日最新資訊28at.com

Kafka 目前用于流處理的場景:相當(dāng)于一個有向無環(huán)圖(DAG,Directed acyclic graph)每個節(jié)點是一個 Kafka Topic,每條邊是一個流處理操作。在這樣的場景下,有兩種操作:xmu28資訊網(wǎng)——每日最新資訊28at.com

? 消費上游消息并提交位點xmu28資訊網(wǎng)——每日最新資訊28at.com

? 處理消息并發(fā)送到下游 Topicxmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

對于由這兩種操作構(gòu)成的一組處理流程需要具備事務(wù)語義,這樣我們就可以不重復(fù)(Exactly Once)的處理上游消息并將結(jié)果可靠地存儲在下游 Topic 中。xmu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片xmu28資訊網(wǎng)——每日最新資訊28at.com

上圖是一個典型的 Kafka 事務(wù)的流程,我們可以看到:MySQL 的 binlog 作為上游數(shù)據(jù)源將數(shù)據(jù)寫入到 Kafka 中,Spark Streaming 從 Kafka 中讀取數(shù)據(jù)并進行處理,最后將處理結(jié)果寫入到另外兩個 Topic 中(圖中三個 Topic 位于同一集群中)。其中消費 Topic A 與寫入 Topic B 和 Topic C 的操作具備事務(wù)語義。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

3、Kafka 的 Exactly Once 語義

xmu28資訊網(wǎng)——每日最新資訊28at.com

從上述的場景中我們可以發(fā)現(xiàn),事務(wù)消息最主要的動機是在流處理中實現(xiàn) Exactly Once 的語義,這可以分為:xmu28資訊網(wǎng)——每日最新資訊28at.com

? 僅發(fā)送一次: 單分區(qū)僅發(fā)送一次由生產(chǎn)者冪等保證,多分區(qū)僅發(fā)送一次由事務(wù)機制保證xmu28資訊網(wǎng)——每日最新資訊28at.com

? 僅消費一次: Kafka 通過消費位點的提交來控制消費進度,而消費位點的提交被抽象成向系統(tǒng) topic 發(fā)送消息。這就使得發(fā)送和消費行為統(tǒng)一起來,只要解決了多分區(qū)發(fā)送消息的一致性就能實現(xiàn) Exactly Once 語義xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

4、生產(chǎn)者冪等性

xmu28資訊網(wǎng)——每日最新資訊28at.com

在創(chuàng)建 Kafka 生產(chǎn)者時設(shè)置了 enable.idempotence 參數(shù),用于開啟生產(chǎn)者冪等性。xmu28資訊網(wǎng)——每日最新資訊28at.com

val props = new Properties()props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, "true")val producer = new KafkaProducer(props)

Kafka 的發(fā)送冪等是通過序列號來實現(xiàn)的,每個消息都會被分配一個序列號,序列號是遞增的,這樣就可以保證消息的順序性。當(dāng)生產(chǎn)者發(fā)送消息時,會將消息的序列號和消息內(nèi)容一起寫入到日志文件中,下次收到非預(yù)期序列號的消息就會返回 OutOfOrderSequenceException 異常。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

設(shè)置 enable.idempotence 參數(shù)后,生產(chǎn)者會檢查以下三個參數(shù)的值是否合法(ProducerConfig#postProcessAndValidateIdempotenceConfigs)xmu28資訊網(wǎng)——每日最新資訊28at.com

? max.in.flight.requests.per.connection 必須小于 5xmu28資訊網(wǎng)——每日最新資訊28at.com

? retries 必須大于 0xmu28資訊網(wǎng)——每日最新資訊28at.com

? acks 必須設(shè)置為 allxmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

Kafka 將消息的序列號信息保存在分區(qū)維度的 .snapshot 文件中,格式如下(ProducerStateManager#ProducerSnapshotEntrySchema):xmu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片xmu28資訊網(wǎng)——每日最新資訊28at.com

我們可以發(fā)現(xiàn),該文件中保存了 ProducerId、ProducerEpoch 和 LastSequence。所以冪等的約束為:相同分區(qū)、相同 Producer(id 和 epoch) 發(fā)送的消息序列號需遞增。即 Kafka 的生產(chǎn)者冪等性只在單連接、單分區(qū)生效,Producer 重啟或消息發(fā)送到其他分區(qū)就失去了冪等性的約束。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

.snapshot 文件在 log segment 滾動時更新,發(fā)生重啟后通過讀取 .snapshot 文件和最新的日志文件即可恢復(fù) Producer 的狀態(tài)。Broker 的重啟或分區(qū)遷移并不會影響冪等性。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

5、事務(wù)消息流程

xmu28資訊網(wǎng)——每日最新資訊28at.com

我們首先從 Demo 開始,來看一下如何使用 Kafka 客戶端完成一個事務(wù):xmu28資訊網(wǎng)——每日最新資訊28at.com

// 事務(wù)初始化val props = new Properties()...props.put(ProducerConfig.TRANSACTIONAL_ID_CONFIG, transactionalId)props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, "true")val producer = new KafkaProducer(props)producer.initTransactions()producer.beginTransaction()// 消息發(fā)送producer.send(RecordUtils.create(topic1, partition1, "message1"))producer.send(RecordUtils.create(topic2, partition2, "message2"))// 事務(wù)提交或回滾producer.commitTransaction()

xmu28資訊網(wǎng)——每日最新資訊28at.com

5.1 事務(wù)初始化

Kafka Producer 啟動后我們使用兩個 API 來初始化事務(wù):initTransactions 和 beginTransaction。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

回顧一下我們的 Demo,在發(fā)送消息時是發(fā)送到兩個不同分區(qū)中,這兩個分區(qū)可能在不同的 Broker 上,所以我們需要一個全局的協(xié)調(diào)者 TransactionCoordinator 來記錄事務(wù)的狀態(tài)。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

所以,在 initTransactions 中,Producer 首先發(fā)送 ApiKeys.FIND_COORDINATOR 請求獲取 TransactionCoordinator。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

之后即可向其發(fā)送 ApiKeys.INIT_PRODUCER_ID 請求獲取 ProducerId 及  ProducerEpoch(也是上文中用于冪等的字段)。此步驟生成的 id 和 epoch 會寫入內(nèi)部 Topic __transaction_state 中,并且將事務(wù)的狀態(tài)置為 Empty。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

__transaction_state 是 compaction Topic,其中消息的 key 為客戶端設(shè)置的transactional.id(詳見 TransactionStateManager#appendTransactionToLog)。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

區(qū)別于 ProducerId 是服務(wù)端生成的內(nèi)部屬性;TransactionId 由用戶設(shè)置,用于標識業(yè)務(wù)視角認為的“同一個應(yīng)用”,啟動具有相同 TransactionId 的新 Producer 會使得未完成的事務(wù)被回滾并且來自舊 Producer(具有較小 epoch)的請求被拒絕掉。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

后續(xù) beginTransaction 用于開始一個事務(wù),該方法會創(chuàng)建一個 Producer 內(nèi)部事務(wù)狀態(tài),標識這一個事務(wù)的開始,并不會有 RPC 產(chǎn)生。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

5.2 消息發(fā)送

上一節(jié)說到 beginTransaction 只是更改 Producer 內(nèi)部狀態(tài),那么在第一條消息發(fā)送時才隱式開啟了事務(wù):xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

首先,Producer 會發(fā)送 ApiKeys.ADD_PARTITIONS_TO_TXN 請求到 TransactionCoordinator。TransactionCoordinator 會將這個分區(qū)加入到事務(wù)中,并更改事務(wù)的狀態(tài)為 Ongoing,這些信息被持久化到 __transaction_state 中。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

然后 Producer 使用 ApiKeys.PRODUCE 請求正常發(fā)送消息到對應(yīng)的分區(qū)中。這條消息的可見性控制在下文消息消費一節(jié)中會詳細討論。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

5.3 事務(wù)提交與回滾

當(dāng)所有消息發(fā)送完成后,Producer 可以選擇提交或回滾事務(wù),此時:xmu28資訊網(wǎng)——每日最新資訊28at.com

? TransactionCoordinator:具有當(dāng)前事務(wù)所有相關(guān)分區(qū)的信息xmu28資訊網(wǎng)——每日最新資訊28at.com

? 其他 Broker:已經(jīng)將消息持久化到日志文件中xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

接下來 Producer 調(diào)用 commitTransaction 會發(fā)送 ApiKeys.END_TXN 請求將事務(wù)狀態(tài)更改為 PrepareCommit(回滾事務(wù)對應(yīng)狀態(tài) PrepareAbort)并持久化到 __transaction_state 中,此時從 Producer 的視角來看整個事務(wù)已經(jīng)結(jié)束了。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

TransactionCoordinator 會異步向各個 Broker 發(fā)送 ApiKeys.WRITE_TXN_MARKERS 請求,當(dāng)所有參加事務(wù)的 Broker 都返回成功后,TransactionCoordinator 會將事務(wù)狀態(tài)更改為 CompleteCommit(回滾事務(wù)對應(yīng)狀態(tài) CompleteAbort)并持久化到 __transaction_state 中。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

5.4 消息的消費

某個分區(qū)的消息可能是事務(wù)消息與非事務(wù)消息混雜的,如下圖所示:xmu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片xmu28資訊網(wǎng)——每日最新資訊28at.com

在 Broker 處理 ApiKeys.PRODUCE 請求時,完成消息持久化會更新 LSO 到第一條未提交的事務(wù)消息的 offset。這樣在消費者消費消息時,可以通過 LSO 來判斷消息是否可見:如果設(shè)置了 isolation.level 為 read_committed 則只會消費 LSO 之前的消息。xmu28資訊網(wǎng)——每日最新資訊28at.com

LSO(log stable offset): 它表示的是已經(jīng)被成功復(fù)制到所有副本(replicas)并且可以被消費者安全消費的消息的最大偏移量。 xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

但是我們可以發(fā)現(xiàn) LSO 之前存在已回滾的消息(圖中紅色矩形)這些消息應(yīng)該被過濾掉:在 Broker 處理 ApiKeys.WRITE_TXN_MARKERS 請求時,會將已回滾的消息索引寫入到 .txnindex 文件中(LogSegmentKafka#updateTxnIndex)。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

后續(xù) Consumer 消費消息時還會收到對應(yīng)區(qū)間的已取消事務(wù)消息列表,上圖區(qū)間中的該列表為:xmu28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

代表 offset 在 [2,5] 之間且由 id 為 11 的 Producer 發(fā)送的消息都已回滾。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

上文我們討論了 __transaction_state 的實現(xiàn)確保同一時間,同一 TransactionId 有且只有一個事務(wù)在進行中。所以可以使用 ProducerId 和 offset 區(qū)間定位回滾的消息不會發(fā)生沖突。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

6、Kafka 事務(wù)提供的 ACID 保證

xmu28資訊網(wǎng)——每日最新資訊28at.com

? 原子性(Atomicity)xmu28資訊網(wǎng)——每日最新資訊28at.com

Kafka 通過對 __transaction_state Topic 的寫入實現(xiàn)了事務(wù)狀態(tài)的轉(zhuǎn)移,保證了事務(wù)要么同時提交,要么同時回滾。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

? 一致性(Consistency)xmu28資訊網(wǎng)——每日最新資訊28at.com

在事務(wù)進入 PrepareCommit 或 PrepareAbort 階段時, TransactionCoordinator 異步向所有參與事務(wù)的 Broker 提交或回滾事務(wù)。這使得 Kafka 的事務(wù)做不到強一致性,只能通過不斷重試保證最終一致性。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

? 隔離性(Isolation)xmu28資訊網(wǎng)——每日最新資訊28at.com

Kafka 通過 LSO 機制和 .txnindex 文件來避免臟讀,實現(xiàn)讀已提交(Read Committed)的隔離級別。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

? 持久性(Durability)xmu28資訊網(wǎng)——每日最新資訊28at.com

Kafka 通過將事務(wù)狀態(tài)寫入到 __transaction_state Topic 和消息寫入到日志文件中來保證持久性。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

7、Kafka 事務(wù)的限制

xmu28資訊網(wǎng)——每日最新資訊28at.com

從功能上看,Kafka 事務(wù)并不能支持業(yè)務(wù)方事務(wù),強限制上游的消費和下游寫入都需要是同一個 Kafka 集群,否則就不具備原子性保障。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

從性能上看,Kafka 事務(wù)的性能開銷主要體現(xiàn)在生產(chǎn)側(cè):xmu28資訊網(wǎng)——每日最新資訊28at.com

開啟事務(wù)時需要額外的 RPC 請求定位 TransactionCoordinator 并初始化數(shù)據(jù)xmu28資訊網(wǎng)——每日最新資訊28at.com

消息發(fā)送需要在發(fā)送消息前向 TransactionCoordinator 同步請求添加分區(qū),并將事務(wù)狀態(tài)的變化寫入到 __transaction_state Topicxmu28資訊網(wǎng)——每日最新資訊28at.com

事務(wù)提交或回滾時需要向所有參與事務(wù)的 Broker 發(fā)送請求xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

對于涉及分區(qū)較少且消息數(shù)量較多的事務(wù),事務(wù)的開銷可以被均攤;反之,較多的同步 RPC 帶來的開銷會極大影響性能。并且每個生產(chǎn)者只能有一個事務(wù)在進行中,這就意味著事務(wù)的吞吐量會受到限制。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

消費側(cè)也有一定的影響:消費者只能看到 LSO 以下的消息,并且需要額外的索引文件來過濾已回滾的消息,這無疑會增加端到端的延遲。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

8、總結(jié)   

xmu28資訊網(wǎng)——每日最新資訊28at.com

通過本文的深入分析,我們了解到 Kafka 的事務(wù)消息功能是如何在流處理場景中提供 Exactly-Once 語義的。Kafka 通過其事務(wù) API 和內(nèi)部機制,實現(xiàn)了消息發(fā)送的原子性、最終一致性、隔離性和持久性,盡管在實際應(yīng)用中可能存在一些性能和功能上的限制。開發(fā)者和架構(gòu)師應(yīng)當(dāng)充分理解這些概念,并在設(shè)計系統(tǒng)時考慮如何有效地利用 Kafka 的事務(wù)功能,以構(gòu)建更加健壯和可靠的數(shù)據(jù)處理流程。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

AutoMQ 是構(gòu)建于對象存儲之上的云原生 Kafka fork,在解決了 Kafka 已有的成本和彈性問題基礎(chǔ)上對 Kafka 100%兼容,因此在 AutoMQ 上也可以使用 Kafka 事務(wù)消息。AutoMQ 作為國內(nèi) Kafka 生態(tài)的忠實擁護者,我們將持續(xù)為 Kafka 技術(shù)愛好者帶來優(yōu)質(zhì)的 Kafka 技術(shù)內(nèi)容分享,歡迎關(guān)注我們。xmu28資訊網(wǎng)——每日最新資訊28at.com

xmu28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-86061-0.html原理剖析| Kafka Exactly Once 語義實現(xiàn)原理:冪等性與事務(wù)消息

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 阿里面試:RabbitMQ如何實現(xiàn)延遲隊列?

下一篇: 代碼質(zhì)量一塌糊涂,特么離職了,新來的人都不知道從哪里,今天分享高質(zhì)量命名方法論給你

標簽:
  • 熱門焦點
  • 天貓精靈Sound Pro體驗:智能音箱沒有音質(zhì)?來聽聽我的

    這幾年除了手機作為智能生活終端最主要的核心之外,第二個可以成為中心點的產(chǎn)品是什么?——是智能音箱。 手機在執(zhí)行命令的時候有兩種操作方式,手和智能語音助手,而智能音箱只
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現(xiàn)已正式出爐,冠軍是來自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從“最美JK”起到“最美女星&r
  • 三萬字盤點 Spring 九大核心基礎(chǔ)功能

    大家好,我是三友~~今天來跟大家聊一聊Spring的9大核心基礎(chǔ)功能。話不多說,先上目錄:圖片友情提示,本文過長,建議收藏,嘿嘿嘿!一、資源管理資源管理是Spring的一個核心的基礎(chǔ)功能,不
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動設(shè)備上有一個固定元素,當(dāng)激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發(fā)生
  • JVM優(yōu)化:實戰(zhàn)OutOfMemoryError異常

    一、Java堆溢出堆內(nèi)存中主要存放對象、數(shù)組等,只要不斷地創(chuàng)建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當(dāng)這些對象所占空間超過
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學(xué)弟,最近學(xué)習(xí)的怎么樣啊 了不起學(xué)弟:最近學(xué)習(xí)的還不錯,每天都在學(xué)習(xí),每天都在進步! 了不起:那你最近學(xué)習(xí)的什么呢? 了不起學(xué)弟:最近在學(xué)習(xí)C
  • 當(dāng)家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己“當(dāng)家”的盒馬,開始加速謀生了。據(jù)盒馬官微消息,盒馬計劃今年開放生鮮供應(yīng)鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經(jīng)與
  • 超閉合精工鉸鏈 徹底消滅縫隙 三星Galaxy Z Flip5與Galaxy Z Fold5發(fā)布

    2023年7月26日,三星電子正式發(fā)布了Galaxy Z Flip5與Galaxy Z Fold5。三星新一代折疊屏手機采用超閉合精工鉸鏈,讓折疊后的縫隙不再可見。同時,配合處
  • 三星推出Galaxy Tab S9系列平板電腦以及Galaxy Watch6系列智能手表

    2023年7月26日,三星電子正式發(fā)布了Galaxy Z Flip5與Galaxy Z Fold5。除此之外,Galaxy Tab S9系列平板電腦以及三星Galaxy Watch6系列智能手表也同期
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美视频一区二区在线观看 | 亚洲精品一区二区三区婷婷月| 国产亚洲日本欧美韩国| 国产性做久久久久久| 极品少妇一区二区| 亚洲久久一区二区| 亚洲一二三区精品| 欧美在线在线| 欧美大片91| 国产精品高潮呻吟| 亚洲一区二区在线播放| 欧美一级成年大片在线观看| 久久视频免费观看| 国产精品久久久久一区| 国产亚洲欧洲一区高清在线观看| 亚洲高清久久| 亚洲一二三区在线| 久久久久欧美精品| 欧美日韩一区视频| 国内精品视频在线播放| 99在线观看免费视频精品观看| 午夜国产一区| 欧美成人高清视频| 国产精品久久久久91| 一区二区亚洲精品国产| 国产精品一区二区三区观看| 狠狠综合久久| 亚洲图片激情小说| 久久久久网站| 国产精品地址| 亚洲二区视频| 性色av一区二区三区在线观看| 欧美国产激情| 国精品一区二区| 一区二区三区精品视频| 久久视频精品在线| 久久久久99精品国产片| 欧美日韩精品综合| 黄色一区二区在线观看| 亚洲永久在线| 欧美精品www在线观看| 国产区精品在线观看| 夜久久久久久| 亚洲神马久久| 久久久久久9999| 国产精品初高中精品久久| 亚洲高清av在线| 欧美一区二区精品久久911| 欧美日韩国产经典色站一区二区三区| 韩日成人av| 亚洲欧美日韩精品久久亚洲区| 久久国产精品99国产| 欧美日韩在线综合| 亚洲国产日日夜夜| 久久男人资源视频| 国产美女精品人人做人人爽| 99国产一区| 欧美激情aaaa| 亚洲高清激情| 久久午夜影视| 国内精品福利| 欧美在线观看网站| 国产精品视屏| 亚洲图片你懂的| 欧美日本韩国一区| 亚洲国产日韩欧美综合久久| 久久综合国产精品| 韩曰欧美视频免费观看| 久久国产综合精品| 国产精品综合av一区二区国产馆| 亚洲香蕉伊综合在人在线视看| 欧美久久九九| 亚洲精品中文字幕在线| 欧美激情视频一区二区三区在线播放 | 欧美激情视频一区二区三区免费| 亚洲高清久久久| 老牛影视一区二区三区| 欧美日韩国产一区二区三区| 亚洲国产精品久久久久婷婷老年| 久久资源在线| 一区二区三区中文在线观看| 久久综合国产精品| 在线观看一区| 麻豆久久精品| 最新高清无码专区| 欧美一区二区三区喷汁尤物| 国产精品免费看久久久香蕉| 亚洲影院在线| 国产伦精品一区二区三区高清| 亚洲尤物视频网| 国产精品一区二区女厕厕| 亚洲综合色在线| 国产乱人伦精品一区二区| 性欧美大战久久久久久久免费观看 | 久久精品视频播放| 狠狠色综合网| 噜噜爱69成人精品| 亚洲国产一区在线观看| 欧美88av| 99精品免费视频| 欧美日韩一区在线| 亚洲伊人久久综合| 国产丝袜一区二区三区| 久久精品电影| 在线观看精品| 欧美精品啪啪| 亚洲小少妇裸体bbw| 国产精品自拍在线| 久久米奇亚洲| 亚洲精品久久久久久一区二区| 欧美日韩少妇| 午夜在线一区| 激情小说另类小说亚洲欧美| 欧美电影免费观看高清| 亚洲视频久久| 国产亚洲午夜| 麻豆久久精品| 中文亚洲视频在线| 国产婷婷色一区二区三区在线| 麻豆精品在线视频| 一区二区三区欧美在线观看| 欧美成黄导航| 日韩视频―中文字幕| 欧美韩日一区| 中文国产成人精品| 欧美日韩中文另类| 翔田千里一区二区| 亚洲国产成人在线播放| 欧美无乱码久久久免费午夜一区| 99re热精品| 国产精品资源| 亚洲视频axxx| 国内外成人在线| 欧美精品亚洲二区| 亚洲免费一在线| 在线观看日韩一区| 国产精品九九久久久久久久| 久久免费国产| 亚洲午夜免费视频| 伊人久久av导航| 欧美视频在线免费| 久久阴道视频| 亚洲天天影视| 亚洲国产精品传媒在线观看| 欧美日韩一级大片网址| 99精品视频网| 国产亚洲欧洲997久久综合| 欧美激情一区二区三区在线视频| 午夜在线一区| 一二三区精品福利视频| 狠狠网亚洲精品| 国产精品看片你懂得| 欧美电影在线| 久久精品国内一区二区三区| 在线一区二区日韩| 亚洲国产精品一区二区尤物区 | 亚洲欧美日韩另类精品一区二区三区 | 国产一区二区中文| 欧美日韩亚洲精品内裤| 久久久久久一区二区三区| 国产精品99久久久久久久久久久久| 伊人影院久久| 国产欧美日韩精品丝袜高跟鞋| 欧美区二区三区| 久久综合九九| 欧美一区二区视频97| 亚洲一级影院| 亚洲日韩欧美视频| 一区二区三区在线观看国产| 国产精品自拍一区| 欧美丝袜一区二区| 欧美精品九九99久久| 老司机成人在线视频| 午夜日韩av| 国外成人在线| 国产精品视频一二三| 欧美日韩视频一区二区| 欧美电影在线免费观看网站 | 国产精品久久看| 欧美日韩国产在线一区| 免费看黄裸体一级大秀欧美| 久久福利影视| 午夜精品福利视频| 亚洲尤物视频在线| 在线中文字幕一区| 99ri日韩精品视频| 亚洲精品午夜精品| 91久久久久久| 亚洲第一在线| 一色屋精品亚洲香蕉网站| 国产一区二区精品久久| 国产精品亚洲综合色区韩国| 国产精品激情偷乱一区二区∴| 欧美日韩综合精品| 欧美日韩亚洲成人| 欧美日韩理论| 欧美日韩一本到| 欧美日韩妖精视频| 欧美日韩一区二区三区在线| 欧美日本在线看| 欧美片在线观看| 欧美日韩免费区域视频在线观看| 欧美日韩国产一中文字不卡| 欧美日韩日韩|