2016-07-05 81 views
1

我試圖與Apache的卡夫卡,同時規劃,以取代兔MQ的,我碰到的幾個概念規劃問題。apache-卡夫卡與100個百萬主題

首先,我們用兔MQ每用戶隊列策略意味着每個用戶使用一個隊列。這適合我們的需要,因爲每個用戶都代表要完成特定用戶的某項工作,並且如果該用戶導致問題,則隊列將永遠不會與其他用戶產生問題,因爲隊列是分離的(問題意味着隊列中的消息將被調度給用戶使用http請求,如果用戶拒絕接收消息(可能是服務器down),它將返回到重試隊列中,這將導致沒有丟失消息(除非隊列關閉))

現在kafka是容錯和故障安全,因爲它寫入磁盤。 正因爲如此,我試圖在我們的結構中實施卡夫卡。

但也有問題,我的尼洋河。

首先,我想創造儘可能多的話題,因爲每個用戶意味着每個用戶必須每一個主題(有什麼問題就這個原因?我最大的估計是,我將有大約1〜500萬主題)

其次,如果我決定根據用戶標識的隨機哈希來查找基於操作和分區的主題,如果一個用戶當前沒有使用消息時出現問題,那麼分區中的所有用戶都必須等待嗎?構建這種情況的最佳方式是什麼?

因此,作爲結論,1〜5百萬的用戶。我們不希望有一個用戶阻止大量其他正在處理的用戶。有每個用戶的主題將解決這個問題,好像有可能與動物園管理員一個問題,如果這樣的大量獲取(這是真的嗎?)

這將是對結構的最佳解決方案?考慮可擴展性?

+2

不知道最佳解決方案;但我有一個比較強烈的感覺,在這裏提出這樣的問題不會有幫助。您主要在設計決策上尋找意見;從這個意義上說,你的問題太廣泛了,很可能會讓你更有價值,更接近要求而不是有用的答案。我寧願直接轉向卡夫卡人;我確信他們有論壇/用戶組/郵件列表... – GhostCat

+0

我也對卡夫卡的建模方面感到困惑。我希望我的回答很好。 –

回答

1

首先,我想創造儘可能多的話題,因爲每個用戶意味着每個用戶必須每一個主題(有什麼問題就這個原因?我最大的估計是,我將有大約1〜500萬主題)

我會建議像這樣的建模。

谷歌周圍「卡夫卡的話題限制」,你會發現這個問題的相關考慮。我想你會發現你不會想要製作數百萬個話題。

其次,如果我決定去爲用戶ID的隨機哈希基於操作和分區主題

是,對這些消息的單一主題,然後航線基礎上,相關的消息字段,如user_idconversation_id。該字段可以作爲消息中的字段出現,並用作ProducerRecordkey,用於確定此消息指定的主題中的哪個分區。我不會將該操作包含在主題名稱中,而是包含在消息本身中。

如果一個用戶當前沒有使用消息時出現問題,分區中的所有用戶都必須等待嗎?構建這種情況的最佳方式是什麼?

這取決於用戶如何消費消息。您可以設置超時,然後將消息路由到某個「失敗」主題。或者以UDP風格向用戶發送消息,而不需要消息。有很多方法可以對此進行建模,並且很難在不知道消費者如何將消息轉發給客戶的情況下提供建議。


此外,如果您使用的是卡夫卡流,記下StreamPartitioner接口。此接口出現在KStreamKTable方法中,這些方法將消息實現爲主題,並且可能在客戶端在特定TCP連接上空閒的聊天應用程序中很有用。