kafka生產者消費者同步與異步

一 生產者發送的同步與異步

生產者發送消息依靠send方法,主要要同步和異步兩種:

異步發送

producer.send(record,callback)

callback就是對發送消息後的回調。該方法輸入參數是metaData和exception:當消息異步發送成功則exception爲空;反之若發送失敗則metadata爲空exception非空。

同步發送

producer.send(record).get()

通過調用feature.get無限等待。若沒有失敗則返回對應的metaData包括消息發送的topic  part offset。

二 消費者提交消費offset的同步與異步

consumer通過向所屬的協調者發送請求來實習位移提交。一般有手動和自動提交兩種方式,手動提交通過enable.auto.commit=false設置。提交會存在三種消費語義:

at most once  先提交再消費  最多消費一次 存在數據丟失可能

at least once 先消費再提交  最少消費一次 存在重複消費可能(kafka默認)

exaclty once 通過事務等機制保證一定消費且只一次

手動提交主要包括同步commitSync和異步commitAsync兩種方法實現。這裏異步提交不是指consumer單獨起一個線程進行位移提交,consumer會在用戶主線程poll中不斷輪旋這次異步提的結果。

提交時可以指定一個map參數,key是分區,value是下一條待消費消息位移

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章