2017-08-03 217 views

回答

0

我不這麼認爲,至少使用缺省配置...讓我解釋一下更好...... 假設你有2個分區對每個話題如此: 登錄主題有分區0和1(姑且稱之爲LIN0, lin1) 註銷主題有分區0和1(我們稱它們爲lout0,lout1)

我們將兩個消費者放在同一個消費者組中,它們被稱爲c1和c2。 對c1使用subscribe()方法可能會發生,它會得到lin0和lout1,而c2可能會得到lin1和lout0。 當生產者寫入用戶名= u1的登錄名(例如)時,它可以在lin0中輸入與用戶名u1登錄相關的消息,並且該消息將被c1消耗。在註銷時可能會發生這樣的情況,生產者會將用戶名= u1的消息寫入到由c2處理的lout0! 因此登錄由c1處理,但通過c2註銷!這就是你想要的當然不想要! 由於subscribe()方法處理自動分區分配和默認分區程序,生產者以循環方式向主題分區分發消息,因此發生此情況。

關於潛在的解決方案可能是編寫一個自定義的分區程序在生產者上使用,以便根據一些基於用戶名的標準,u1將始終寫在分區0的兩個主題(so lin0和lout0)。 然後在消費者端使用assign(),因此要求特定的分區,例如c1可以完全從lin0和lout0請求消費者。 當然,您失去了訂閱提供的重新平衡功能。

相關問題