kafka消費延遲或者重複消費原因

2021-09-13 12:27:35 字數 709 閱讀 2719

由於專案中需要使用kafka作為訊息佇列,並且專案是基於spring-boot來進行構建的,所以專案採用了spring-kafka作為原生kafka的乙個擴充套件庫進行使用。先說明一下版本:

用過kafka的人都知道,對於使用kafka來說,producer的使用相對簡單一些,只需要把資料按照指定的格式傳送給kafka中某乙個topic就可以了。本文主要是針對spring-kafka的consumer端上的使用進行簡單一些分析和總結。

kafka的速度是很快,所以一般來說producer的生產訊息的邏輯速度都會比consumer的消費訊息的邏輯速度快。

之前在專案中遇到了乙個案例是,consumer消費一條資料平均需要200ms的時間,並且在某個時刻,producer會在短時間內產生大量的資料丟進kafka的broker裡面(假設平均1s中內丟入了5w條需要消費的訊息,這個情況會持續幾分鐘)。

對於這種情況,kafka的consumer的行為會是:

遇到了這個問題之後, 我們做了一些步驟:

那麼問題來了,為什麼spring-kafka的提交offset的策略能夠解決spring-kafka的auto-commit的帶來的重複消費的問題呢?下面通過分析spring-kafka的關鍵原始碼來解析這個問題。

首先來看看spring-kafka的消費執行緒邏輯

kafka重複消費 漏消費情況

kafka重複消費的情況 資料沒有丟,只是資料重複消費了。丟不丟資料指的是producer到broker的過程,以及broker儲存資料的過程。重複消費 漏消費指的是消費結果,所以我們記憶這些過程的時候,或者定位問題的時候,首先應該明確,是丟資料了還是重複消費了。重複消費 ack 1 produce...

kafka重複消費問題

問題描述 採用kafka讀取訊息進行處理時,consumer會重複讀取afka佇列中的資料。問題原因 kafka的consumer消費資料時首先會從broker裡讀取一批訊息資料進行處理,處理完成後再提交offset。而我們專案中的consumer消費能力比較低,導致取出的一批資料在session....

kafka消費延遲問題查詢

最近線上偶爾爆出kafka消費延遲,但是系統的資料量並不大,為什麼會延遲呢?具體分析如下。基本思路 1.檢視機器中資料積壓情況,是否是因為資料量過大導致的消費延遲。2.統計資料傳送kafka成功到資料消費出來 還未做業務處理 的耗時。3.統計資料消費出來並完成業務處理的耗時。可以看出該group中有...