通過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的頻率
相關文章
- localStorage設定過期時間
- redis設定過期時間Redis
- JavaScript 設定cookie 過期時間JavaScriptCookie
- JavaScript 設定Cookie過期時間無效JavaScriptCookie
- 如何給localStorage設定一個過期時間?
- tomcat 設定session過期時間(四種方式)TomcatSession
- C# 給PDF文件設定過期時間C#
- 關於 session 未到設定的過期時間就過期的問題(分享坑點)Session
- 優雅的快取解決方案--設定過期時間快取
- httpsession過期時間HTTPSession
- redis 過期時間Redis
- 建立帶過期時間的map
- 檢視Cookie過期時間Cookie
- redis hset hmset過期時間Redis
- Passport 設定token 過期時間盡然不生效!這是為什麼?Passport
- 面試官:RabbitMQ過期時間設定、死信佇列、延時佇列怎麼設計?面試MQ佇列
- JavaScript設定cookie立即過期JavaScriptCookie
- RabbitMQ 高階 - 過期時間 TTLMQ
- 通過定時器、時間分片、Web Worker優化長任務定時器Web優化
- Oracle 密碼永不過期設定Oracle密碼
- GitLab 中文版如何設定密碼長度、複雜度以及過期時間?Gitlab密碼複雜度
- wordpress文章的顯示時間期限或過期時間的標誌
- 對於Redis中設定了過期時間的Key,你需要知道這些內容Redis
- Cookie 作用,互動過程解析,設定,獲取,刪除,生效時間的設定Cookie
- redis 設定過期時間,以資料夾形式展示key顯示快取資料Redis快取
- 通過 Redis 定時執行指令碼Redis指令碼
- Redis 過期時間與記憶體管理Redis記憶體
- localstorage實現帶過期時間的快取功能快取
- djangoadmin定時檢查產品是否過期Django
- [ASP.NET] 如果將快取“滑動過期時間”設定為1秒會怎樣?ASP.NET快取
- python通過TimedRotatingFileHandler按時間切割日誌Python
- 通過MapReduce降低服務響應時間
- Laravel Sanctum 如何自定義每個 token 的過期時間Laravel
- Keytool命令詳解(好文章!詳細設定一些引數比如過期時間等)
- 疫情期間,我通過專案重學了小程式
- 通過JQuery ajax獲取伺服器時間jQuery伺服器
- Flutter 中通過 Container 實現時間軸效果FlutterAI
- Nginx通過geo模組設定白名單Nginx