簡體   English   中英

如果kafka使用者使用多個主題,是否會處理相同的主題密鑰?

[英]Does kafka consumer handle same topic keys if it consumes multiple topics?

假設我有2個kafka主題登錄注銷,分別用戶名相同的分區數進行了划分 如果我運行一個由兩個消費者同時使用這兩個主題的消費者組,是否可以確定每個用戶的登錄和注銷事件將由同一消費者處理?

我認為至少在默認配置下不是這樣的...讓我更好地解釋...想象每個主題有2個分區,所以:logins主題具有0和1分區(我們稱它們為lin0,lin1)logouts主題具有分區0和1(我們稱它們為lout0,lout1)

我們在同一個消費者組中擁有兩個消費者,它們分別稱為c1和c2。 與c1一起使用subscribe()方法可能會發生,它將得到lin0和lout1,而c2可能會得到lin1和lout0。 例如,當生產者將使用用戶名= u1登錄到登錄名時,它可能會進入lin0並顯示與用戶名u1登錄有關的消息,並且該消息將由c1使用。 可能發生注銷時,生產者將用戶名= u1的消息寫入由c2處理的lout0! 因此,登錄由c1處理,但由c2注銷! 那當然是你不想的! 這種情況的發生是由於處理自動分區分配的subscription()方法和生產者上的默認分區器(默認分區器)以循環方式將消息分發到主題分區。

在可能的解決方案上,可能是編寫一個自定義分區程序以在生產者上使用,以便使用基於用戶名的某些條件,對於兩個主題(因此lin0和lout0),u1總是寫在分區0上。 然后在使用者端使用assign(),因此要求特定的分區,例如,c1可以確切地從lin0和lout0詢問使用者。 當然,您會失去訂閱提供的重新平衡功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM