kafka實現分布式事務

2021-10-12 10:39:39 字數 1274 閱讀 2680

一、分布式事務的本質

本質上要解決,邏輯上是乙個事務,但是**又是在兩個程序裡面實現,spring的事務管理不能跨程序的問題。

那麼就需要用第三方介質記錄當前這個分布式事務邏輯的狀態,一般用資料庫或redis快取記錄。

二、kafka+本地訊息表實現的關鍵點

生產者:

生產者本地業務邏輯執行完成之後,往資料庫插入一條待傳送的資料(在乙個事務內,要麼全部成功,要麼全部失敗)

然後從資料庫去取這條待傳送的資料,傳送到kafka,狀態更新為已傳送(乙個事務)。

消費者:

消費者從kafka取出訊息之後,將訊息資料庫資料更新為待消費(在乙個事務內,要麼全部成功,要麼全部失敗)

然後從資料庫去取這條待消費的資料,進行消費端的業務處理,處理完成之後,狀態更新為已消費(乙個事務)。

定時任務掃瞄資料庫的待傳送資料,如果有,則代表有生產者本地執行成功,

但是傳送到kafka失敗的情況,那就重新傳送。

定時任務掃瞄資料庫的待消費資料,如果有,則代表有消費者訊息取到了,

但是執行本地邏輯沒有成功,那就重新執行消費邏輯。

總結:

生產者和消費者的本地業務邏輯和往kafka訪問訊息的邏輯要拆分開,用第三方介質記錄當前這條訊息的狀態。

保證生產者本地業務執行完畢了才往kafka傳送,傳送失敗了可以重發。

保證消費者從fafka獲取訊息之後才執行消費邏輯,執行消費邏輯失敗了可以重新執行。

其實就是保證了本地業務邏輯和kafka的訪問拆分成兩個事務。

三、優缺點

優點:

事務吞吐量大. 因為不需要等待其他資料來源響應.
缺點:

1、容易出現較多的中間狀態,保證不了實時性。

比如生產者已經傳送資料了,但是消費者才執行到第一步

(拉取訊息,留證據到本地資料庫訊息表),這個時候使用者登入之後,

可能就看不到消費後的資料。在實時性要求高的業務不太適用。

2、與具體業務場景繫結,偶爾性強,不可以共用。

四、適用場景:

1、實時性要求不高,只要滿足最終一致性的情況

2、生產者的邏輯是否成功,不依賴於消費者的邏輯執行是否成功的情況,

比如:下訂單和出庫,這就是典型的生產者的邏輯要依賴於消費者的邏輯

是否執行成功。

因為下訂單,如果庫存不夠,那麼訂單也是不能成功的。

分布式事務 分布式事務的實現

如果在多個服務中需要對不同的資料庫進行操作。因為不同服務操作的資料庫都不同,所以保證在同乙個事務中完成操作顯然是不科學的。那實現分布式事務的思想 1 方法入口,建立一條日誌記錄,狀態定義為初始狀態,即儲存本條日誌記錄 可以儲存在資料庫中,也可以寫出到本地磁碟檔案 2 可以在非同步執行緒或在定時任務中...

分布式 分布式事務

是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...

事務,分布式系統實現事務

1.事務概念 事務是指邏輯上的一組操作,組成該操作的各個單元,要麼全部執行成功,要麼全部執行失敗 只有全部執行成功後,事務才會提交,若有乙個單元執行失敗,那麼所有資料都會通過回滾自動恢復.回滾機制 當事務內部有乙個操作執行失敗後,那麼將會撤銷所有已完成的更新操作 2.事務的四大特性 1 原子性 即不...