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條數據
