Activemq持久化之kahadb特性

2022-08-10 03:09:10 字數 1437 閱讀 7862

介紹

資料的持久化是很多系統都會涉及到的乙個問題,尤其是redis,activemq這些資料主要是儲存在記憶體中的。既然存在記憶體中,就會面臨宕機時資料丟失的風險。這一問題的解決方案就是通過某種方式將資料寫到磁碟上,也就是所謂的持久化。

activemq提供了三種持久化方式,分別基於jdbc, kahadb和leveldb. 目前官方最推薦的是基於kahadb的持久化。 jdbc是activemq最早提供的一種持久化方式,但是用資料庫去做持久化確實不合適,畢竟效能有瓶頸,而且只是需要簡單的讀寫資料,不需要資料庫各種強大的功能。現在去看文件的話,連基本的配置都被埋的很深,所以這種方式我們也就不細說了。

正是由於基於jdbc的方式存在的種種問題,activemq後來就接連提供了基於kahabd和leveldb的持久化方式.leveldb 是google開源的乙個kv磁碟儲存系統,應用很廣,kahadb沒找著源頭,應該就是activemq團隊開發的,也是一種基於磁碟的儲存系統。按理說,leveldb的效能是要好一些的,之前無論是activemq的預設配置,還是文件裡的推薦使用方法,都是首選leveldb. 但是有一天這個基於leveldb的持久化方式就突然被activemq廢棄了,主要原因是leveldb是乙個第三方系統,維護起來不如kahadb那麼方便。到當前最新版本,leveldb持久化還存在不少嚴重問題,功能也不如kahadb完善。所以目前來說,最推薦的持久化方式就是kahadb. 接下來介紹一下基本配置。

基本配置

基本配置很簡單,看預設配置裡的就可以,開啟activemq.xml

這樣資料會自動同步到kahadb目錄下。可以去目錄下看一下kahadb的檔案結構,檔案儲存的主體是一系列的.log檔案,每條需要持久化的資料會一次寫入,乙個log檔案到達一定大小後,會新建乙個新的。當乙個檔案內的所有訊息都已經被消費完畢後,這個檔案會被刪除。

相關引數

常見且幾個比較有用的:

一些使用建議

1.關於日誌,可以把kahadb的trace級別的日誌開啟,在log4j裡新增org.apache.activemq.store.kahadb.messagedatabase這個logger的配置就可以,例如

log4j.logger.org.apache.activemq.store.kahadb.messagedatabase=trace, kahadb

2.為每個佇列單獨配置儲存目錄

這樣做的原因還是和儲存空間有關,kahadb寫檔案時是按訊息順序依次寫入的,刪檔案時則要等到這個檔案內的所有訊息被消費完畢。也就是說,即使這個檔案裡只有一條訊息沒被消費掉,也需要占用完整的空間。如果本身佇列特別多,恰好有乙個佇列消費沒跟上,可能它本身占用空間非常小,但是會占用大量磁碟空間無法釋放。給每個佇列分別配置的話就可以大大緩解這一情況。

ActiveMQ持久化測試

activemq 很好的支援了訊息的永續性。結合起來應該是很好的保證了訊息的可靠傳送。訊息永續性的原理很簡單,就是在傳送者將訊息傳送出去後,訊息中心首先將訊息儲存到本地資料檔案 記憶體資料庫或者遠端資料庫等,然後試圖將訊息傳送給接收者,傳送成功則將訊息從儲存中刪除,失敗則繼續嘗試。訊息中心啟動以後首...

ActiveMQ持久化儲存

size medium activemq的訊息可以儲存在不同的儲存中,預設是kahadb,leveldb,mysql,oracle size size large 1 配置資料庫連線 size c m apache activemq 5.14.1 confactivemq.xml新增資料庫連線資料。...

Activemq訊息持久化

官方文件 activemq持久化相關配置 usr local apache activemq 5.11.1 conf activemq.xml 官方預設的持久化為kahadb 可以稍作調優 indexwritebatchsize 1000 journalmaxfilelength 32mb enab...