kafka 中的資料只能儲存七天,隨之而來的問題就是某個偏移量對應的資料被清除,我們通過偏移量去查詢資料而發生的報錯(資料已經被 kafka 給清除掉了),也就是說我們讀取的偏移量小於 kafka 中資料儲存的最早的偏移量,說明資料已經被 kafka 給乾掉了
解決方式:
將拿到的偏移量和 kafka 中儲存的最小偏移量進行對比,哪個大用哪個
kafka 是個高可用、高併發、高吞吐量的程式,當生產者生產的資料過多,消費者無法處理,我們就需要乙個訊息中介軟體來作為緩衝,儲存資料,這個訊息中介軟體我們使用的就是 kafka
zookeeper 是用來保證其他程式的高可用和資料的一致性,所以我們將 kafka 的元資料儲存在了zookeeper中
為了保證乙個消費者中多個執行緒去處理時,不會使得訊息的順序被打亂,則可以在消費者中,訊息分發至不同的執行緒時,加入乙個佇列,消費者去做 hash 分發,將需要放在一起的資料,分發至同乙個佇列中,最後多個執行緒從佇列中取資料
kafka 寫入 partition 時指定乙個 key,例如 訂單 id,那麼消費者從 partion 中取出資料的時候肯定是有序的,當開啟多個執行緒的時候可能導致資料不一致,這時候就需要記憶體佇列,將相同的 hash 過的資料放在乙個記憶體佇列裡,這樣就能保證一條執行緒對應乙個記憶體佇列的資料寫入資料庫的時候順序性保持一致,從而可以開啟多條執行緒對應多個記憶體佇列
kafka 的分割槽數是要根據情況而定的,評判的標準一般是根據吞吐量來評判
分割槽數 = 總吞吐量 / 最大的消費者吞吐量,最大的生產者吞吐量
broker 數量 * 每台機器上可用的 cpu 核數
kafka 如果發生資料丟失,我們要分析資料丟失是發生在消費者端還是生產者端
如果是發生在生產者端,我們可以調節生產者中的分割槽數的副本數量和 leader 的感知數量
如果是發生在消費者端,那麼說麼資料是在未處理完畢就進行了提交偏移量,我們可以關閉手動提交,進行自動提交偏移量
kafka 有個概念叫做偏移量,每次寫入資料,偏移量都會進行一次提交,我們使用過的是0.10版本,偏移量由 kafka 自身儲存,消費者在消費資料的時候,會根據偏移量來檢視從何處開始讀,消費完畢後會進行一次偏移量的提交,但是如果程式突然崩潰,消費者消費完資料了,但是偏移量卻沒提交上去,下次繼續讀的時候就會出現重複消費的問題,因為我們是使用的直連方式,是自己手動維護偏移量的
TCP IP面試題(持續更新)
no.1 tcp ip基礎 這些知識點都可以參考 no.2 常見面試題 tcp與udp的區別 tcp協議是有連線的,有連線的意思是開始傳輸實際資料之前tcp的客戶端和伺服器端必須通過三次握手建立連線,會話結束之後通過四次揮手結束連線。而udp是無連線的 tcp協議保證資料按序傳送,按序到達,提供超時...
幾個面試題 持續更新
1.簡單列舉了解的程式語言及語言間區別。python簡單,python開發效率快,python 簡潔,跨平台,學習成本比較低 2.列舉python2和3的區別 後期要找一些模組和專案的區別 py3 print 編碼方式 unicode 類 新式類 range 可迭代物件 input 獲取的內容全都是...
HashMap面試題(持續更新)
1 hashmap的資料結構?底層使用的是雜湊表 陣列加鍊表 結合陣列和鍊錶的優點,為提高鍊錶的查詢效率,jdk8之後,當鍊表的長度超過8,鍊錶就轉換成紅黑樹 2 能說說hashmap的put 和get 方法的具體實現嘛?儲存物件時,將k v值傳給put 方法 獲取物件時,將k傳給get 方法 ha...