kafka之consumer參數auto.offset.reset 0.10+


https://blog.csdn.net/dingding_ting/article/details/84862776

https://blog.csdn.net/xianpanjia4616/article/details/84347087 

 

kafka-0.10.1.X版本之前: auto.offset.reset 的值為smallest,和,largest.(offest保存在zk中)

kafka-0.10.1.X版本之后: auto.offset.reset 的值更改為:earliest,latest,和none (offest保存在kafka的一個特殊的topic名為:__consumer_offsets里面)

auto.offset.reset: 可理解為kafka consumer讀取數據的策略,本地用的kafka版本為0.10,因此該參數可填earliest|latest|none。

earliest: 當各分區下有已提交的offset時,從提交的offset開始消費;無提交的offset時,從頭開始消費
latest: 當各分區下有已提交的offset時,從提交的offset開始消費;無提交的offset時,消費新產生的該分區下的數據
none: topic各分區都存在已提交的offset時,從offset后開始消費;只要有一個分區不存在已提交的offset,則拋出異常

測試前提: 我們主要做的是Flink的Streaming sql,在創建kafka source的時候封裝了該參數,查看是否消費數據,我們借助了jmeter和Flink web ui上的metrics等工具。

測試過程:
earliest模式: kafka source的名稱為a1
1.在a1中,topic為test1,groupId為0001,0001從未被消費過,數據(24條)提前發送,再啟動sql1(select * from a1 ),會從頭開始消費,顯示24條數據

2.停掉1中所提到的sql1,發送不同的6條數據到kafka中,不更換a1的groupId,再啟動sql1(select * from a1 ),會接着上次消費的位置開始往后消費,顯示6條數據


latest模式:kafka source的名稱為a2
1.在a2中,topic為b,groupId為0002,0002未被消費,數據提前發送,再啟動sql2(select * from a2),在jmeter上未看到結果,在flink中查看相關metrics,無數據讀入;在不殺掉sql2的前提下,發送一批(8條)數據,只消費后發送的8條數據。

2.停掉1中的sql2,不更換a2中的groupId,發送7條數據到b中,啟動sql2,只顯示后發送的7條數據

none模式: kafka source的名稱為a3
1.在a3中,topic為c,設置groupId為0001(未被消費過),數據提前發送,再啟動sql3(select * from a3),sql執行失敗,在日志中報錯:

2.在a3中,topic為c,設置groupId為0002(被消費過),啟動sql3(select * from a3),發送8條數據到c中,jmeter中顯示8條數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM