幾種不同的注冊方式
- subscribe方式:當主題分區數量變化或者consumer數量變化時,會進行rebalance;注冊rebalance監聽器,可以手動管理offset不注冊監聽器,kafka自動管理
- assign方式:手動將consumer與partition進行對應,kafka不會進行rebanlance
關鍵配置及含義
-
enable.auto.commit 是否自動提交自己的offset值;默認值時true
-
auto.commit.interval.ms 自動提交時長間隔;默認值時5000 ms
-
consumer.commitSync(); offset提交命令;
默認配置
采用默認配置情況下,既不能完全保證At-least-once 也不能完全保證at-most-once;
比如:
在自動提交之后,數據消費流程失敗,這樣就會有丟失,不能保證at-least-once;
數據消費成功,但是自動提交失敗,可能會導致重復消費,這樣也不能保證at-most-once;
但是將自動提交時長設置得足夠小,則可以最大限度地保證at-most-once;
at most onece模式
基本思想是保證每一條消息commit成功之后,再進行消費處理;
設置自動提交為false,接收到消息之后,首先commit,然后再進行消費
at least onece模式
基本思想是保證每一條消息處理成功之后,再進行commit;
設置自動提交為false;消息處理成功之后,手動進行commit;
采用這種模式時,最好保證消費操作的“冪等性”,防止重復消費;
exactly onece模式
核心思想是將offset作為唯一id與消息同時處理,並且保證處理的原子性;
設置自動提交為false;消息處理成功之后再提交;
比如對於關系型數據庫來說,可以將id設置為消息處理結果的唯一索引,再次處理時,如果發現該索引已經存在,那么就不處理;