auto.offset.reset用來指定consumer消費策略,有如下取值:
1、latest(分區有提交的offset,從提交的offset后一個offset開始消費;否則等待新生產的數據)【默認配置】
示例:topic3有兩個分區、3個副本;其中topic3-0有五條數據,offset為0~4,但是offset0~offset4未提交,驗證結果如下:
指定不自動提交offset && auto.offset.reset=latest:

消費者啟動后,發現未消費到數據,並且對於topic3-0分區來說HW為5:

此時再生產5條數據,可以看到,消費者消費的offset區間為5~9:

2、earliest(分區有提交的offset,從提交的offset后一個offset開始消費;否則從頭開始消費)
示例:接着前面的例子,topic3-0中有10條數據,offset為0~9,驗證結果如下:
配置auto.offset.reset為earliest

消費者啟動,可以看到從頭開始消費數據:

3、none(分區有提交的offset,從提交的offset后一個offset開始消費;否則拋出異常)
分區無已經提交的offset:

分區0內有15條數據,offset為0~14,其中offset0~offset9已經被提交;offset10~14未提交;
consumer啟動后再生產5條數據,結果如下:

個人使用建議:
1、auto.offset.reset最好不要設置為latest,這是因為:如果分區內的數據未被消費過,這時消費者上線,會導致消費者無法消費到前面的數據(當然也得看應用場景,如果認為這種情況的數據就該丟失,那當我沒說)
2、auto.offset.reset設置為earliest時,可能會有重復消費的問題,這就需要消費者端做數據去重處理
