由於 consumer 在消費過程中可能會出現斷電宕機等故障,consumer 恢復后,需要從故 障前的位置的繼續消費,所以 consumer 需要實時記錄自己消費到了哪個 offset,以便故障恢 復后繼續消費。
Kafka 0.9 版本之前,consumer 默認將 offset 保存在 Zookeeper 中,從 0.9 版本開始, consumer 默認將 offset 保存在 Kafka 一個內置的 topic 中,該 topic 為__consumer_offsets。

2、自定義存儲 offset
Kafka 0.9 版本之前,offset 存儲在 zookeeper,0.9 版本及之后,默認將 offset 存儲在 Kafka 的一個內置的 topic 中。
除此之外,Kafka 還可以選擇自定義存儲 offset。
offset 的維護是相當繁瑣的,因為需要考慮到消費者的 Rebalace。
當有新的消費者加入消費者組、已有的消費者退出消費者組或者所訂閱的主題的分區發生變化,就會觸發到分區的重新分配,重新分配的過程叫做 Rebalance。
消費者發生 Rebalance 之后,每個消費者消費的分區就會發生變化。因此消費者要首先 獲取到自己被重新分配到的分區,並且定位到每個分區最近提交的 offset 位置繼續消費。 要實現自定義存儲 offset,需要借助 ConsumerRebalanceListener,其中提交和獲取 offset 的方法,需要根據所選的 offset 存儲系統自行實現