樓主測試的時候使用的都是同步模式,閒來有空測試了以下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...