簡體   English   中英

如何在Spring-Kafka中同時使用多個服務器

[英]How to use multiple servers concurrently in Spring-Kafka

我必須將kafka用作隊列,但要使用多個服務器進行並發處理,並且不應該接收重復項。 例如,

P1和P2正在將數據發送到消息分區P。C1,C2和C3正在偵聽分區P,以便可以保持順序。

在這種情況下,只有一個節點處於活動狀態,這是一項耗時的工作,因此我們遇到了瓶頸。 由於我們希望維護順序,因此我們不想使用多個分區。

我目前的選擇是使長時間運行的工作進入異步狀態,以便它可以做最少的工作,而讓異步工作休息。 在我們的用例中,這很難實現。

另一個選擇是使用多個分區並手動處理排序,這也不是很可取。

最后的選擇是將其用作主題,並手動處理重復性。

沒有一個選項是完美的,我想要的是像spring-jms可共享主題連接那樣使用的,它注冊所有訂戶,但是在循環中僅將消息發送給其中的一個。 這不能保證嚴格的順序,但是我的測試仍然比具有多個分區的kafka更好。

請問您有什么建議嗎?

好吧,這就是卡夫卡的工作方式。

同一consumer group中的所有消費者都訂閱了該主題,但是其中只有一個可以消費。 如果以某種方式失敗,則重新平衡發生在代理上,組中的其他一些使用者將從分區中選擇事件流。

這樣我們就可以從Kafka性能中獲得最大的消耗。 如果您的邏輯下游很慢,那已經不是Kafka的責任了。

因此,從本質上來說,原始卡夫卡不可能實現循環消費。

您可以通過將數據轉移到其他消息傳遞代理程序來真正實現該目標。 相同的JMS或RabbitMQ。

借助Spring Integration及其持久的QueueChannel支持,您還可以實現輪詢。

但是,恐怕Apache Kafka本身並沒有做到這一點。 是的,Spring Kafka不會違約並對此事進行介紹。 僅僅因為這種方法會導致持續的重新平衡。

暫無
暫無

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

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