pulsar非同步生產模式下游標回滾實現

2021-09-12 11:48:31 字數 805 閱讀 7196

樓主測試的時候使用的都是同步模式,閒來有空測試了以下pulsar的非同步生產模式發現了一些有趣的事情,和大家分享以下

對分割槽topic而言,開啟

.enablebatching( true )

.maxpendingmessages(128)

批處理功能

後續會介紹為什麼和有什麼影響。

例如producer.sendasync(str1.getbytes());

確保訊息成功生產之後,我們在消費端獲取訊息;

messagemessage = consumer.receive( );

根據messageid來對游標進行重置

messageid messageid = message.getmessageid();

consumer.seek(messageid);

此時細心的小夥伴可能就發現訊息回滾的位置很有規律型,正好是128的倍數+1;假設我們在第1000條訊息重置游標,我們會發現游標實際回滾到第897條訊息。此時我們不僅是疑問的,為什麼會這樣???

其實這是和.maxpendingmessages(128)這個引數的關係很大,128條訊息一次傳送到pulsar。所以會從第897條訊息重置游標。

這樣就會照成訊息的重複消費;

方法一,採用同步生產的模式,以上問題迎刃而解,只是生產效率比非同步低很多,十倍以上。不太可取

方法二,非同步生產模式,回滾到message id的位置,消費到第1000條再往下游傳送訊息。完美解決。

vim命令模式下游標移動 查詢

1.需要安裝vim 在shell命令下敲命令vimtutor ide整合開發環境 1.vim的三種工作模式 a.命令模式 b.編輯模式 c.末行模式 命令模式 對檔案進行修改 編輯模式 末行模式 行調整,查詢,替換,儲存退出 3.命令模式下的相關操作 儲存退出 shift zz 格式化 gg g 游...

生產消費模式

package com.phone.week5.day3 有乙個倉庫放字元的,它有乙個生產字元的方法,也有乙個拿字元的方法 倉庫裡只能有乙個字元 有乙個生產者,可以呼叫倉庫裡生產字元的方法 有乙個消費者,可以呼叫倉庫裡拿字元的方法 兩個人不能同時生產或拿 1.建立乙個共享資源類 2.建立生產者 3....

生產消費模式

生產者producer 生產某個物件 共享資源 放在緩衝池中,然後消費者從緩衝池中取出這個物件。也就是生產者生產乙個,消費者取出乙個。這樣進行迴圈。生產者 class producer implements runnable override public void run catch interr...