通過offsets.retention.minutes設定kafkaoffset的過期時間
我的原創地址:https://dongkelun.com/2018/06/21/modifyKafkaOffsetTime/
前言
本文記錄博主如何設定kafka的offset過期時間並測試其效果
1、offsets.retention.minutes
通過修改offsets.retention.minutes的值即可改變kafka offset的過期時間,單位為分鐘,改完之後需要重啟kafka。具體的配置檔案為$KAFKA_HOME/config/server.properties,原生的kafka配置檔案裡可能沒有這個配置項,自己新增上即可,比如設定過期時間為一小時,那麼按如下配置即可
offsets.retention.minutes=60
2、官方文件
網上有的部落格說官網文件對於這個配置的說明有點錯誤,將offsets.retention.minutes錯寫成了offsets.topic.retention.minutes,但是我檢視了一下,官方文件上並沒有寫錯,可能是之前的版本寫錯了,而且很多部落格按之前的版本寫的,大家注意一下。官網文件地址http://kafka.apache.org/documentation/
3、ambari的bug
因本人用ambari管理大資料叢集的各個元件,所以在介面上直接修改kafka的配置,在介面上檢視kafka的配置offsets.retention.minutes為86400000,因為kafka offset預設過期時間為一天,那麼根據這個86400000來看offsets.retention.minutes的單位為毫秒才對,所以一開始誤認為單位為毫秒,所以修改配置後的時間設定的很大,導致一開始測試不成功,經過一點點的驗證,發現單位實際上為分鐘,而ambari上顯示的86400000應該是個bug,因為kafka預設的配置檔案裡是沒有這個配置項的,所以我估計ambari一開始也沒有配置只是搜尋的時候將其顯示為86400000,而並沒有真正的生效,只有將這個配置項修改之後,才會生效,並且單位為分鐘(看了一下ambari的大部分預設時間單位都是毫秒~)。
後來在官網上看到offsets.retention.minutes的default為1440也證實了這一點。
4、測試效果
雖然本人的需求是將預設的一天的時間改長一點,但是時間長了測試太慢,所以將時間改短一點測試效果即可,測試程式碼見Spark Streamming+Kafka提交offset實現有且僅有一次,經過多次測試,得出結論,在修改重啟之後,不管是新增加的topic還是之前的topic,只要是新儲存的offset都會生效,而之前儲存的offset,比如之前是一天才會刪除,那麼修改重啟後,之前儲存的offset還是會一天後才能刪掉。
注:spark儲存offset程式碼
stream.foreachRDD { rdd =>
val offsetRanges = rdd.asInstanceOf[HasOffsetRanges].offsetRanges
// some time later, after outputs have completed
stream.asInstanceOf[CanCommitOffsets].commitAsync(offsetRanges)
}
5、注意
offset的過期時間是不精確的,實際上大於等於你設定的時間,假如設定的時間為10分鐘,那麼可能在10-20之後才會刪掉,原因我想應該是kafka會定期的檢查offset被標記為應該清理的offset,可能offsets.retention.check.interval.ms這個配置項有關,因為其預設時間為十分鐘,但是沒有去驗證這一點。
* offsets.retention.check.interval.ms 600000 offset管理器檢查陳舊offsets的頻率
相關文章
- redis設定過期時間Redis
- localStorage設定過期時間
- JavaScript 設定cookie 過期時間JavaScriptCookie
- 設定phpsession過期時間PHPSession
- JavaScript 設定Cookie過期時間無效JavaScriptCookie
- C#如何設定session過期時間C#Session
- C# 給PDF文件設定過期時間C#
- 如何給localStorage設定一個過期時間?
- SAP過帳期間設定
- 關於 session 未到設定的過期時間就過期的問題(分享坑點)Session
- tomcat 設定session過期時間(四種方式)TomcatSession
- 優雅的快取解決方案--設定過期時間快取
- Windows區域網通過NTP設定時間同步Windows
- 通過配置檔案來修改WAS控制檯Session過期時間的方法Session
- httpsession過期時間HTTPSession
- Linux密碼過期時間設定 /etc/login.defsLinux密碼
- 設定有過期時間的廣告程式碼例項
- redis hset hmset過期時間Redis
- 檢視Cookie過期時間Cookie
- 面試官:RabbitMQ過期時間設定、死信佇列、延時佇列怎麼設計?面試MQ佇列
- 定時拷貝加時間維的檔案和定時刪除過期檔案
- Redis和DelayQueue設計具有過期時間的快取Redis快取
- Passport 設定token 過期時間盡然不生效!這是為什麼?Passport
- RabbitMQ 高階 - 過期時間 TTLMQ
- JavaScript獲取cookie過期時間JavaScriptCookie
- JavaScript設定cookie立即過期JavaScriptCookie
- JavaScript設定cookie永不過期JavaScriptCookie
- 通過定時器、時間分片、Web Worker優化長任務定時器Web優化
- 內網通過ntpdate同步時間內網
- 如何正確的評估redis過期時間Redis
- Oracle 密碼永不過期設定Oracle密碼
- 對於Redis中設定了過期時間的Key,你需要知道這些內容Redis
- Redis 過期時間與記憶體管理Redis記憶體
- redis 設定過期時間,以資料夾形式展示key顯示快取資料Redis快取
- 通過 Redis 定時執行指令碼Redis指令碼
- localstorage實現帶過期時間的快取功能快取
- 教你修改 Laravel "記住我" Cookie 的過期時間.LaravelCookie
- Cookie 作用,互動過程解析,設定,獲取,刪除,生效時間的設定Cookie