2016-03-07 115 views
1

我有一些概念思維塊。我在看下面用卡夫卡:使用Kafka將Web層與業務邏輯代碼分離

---http-requests---> [Web Tier] 

[Web Tier] ----composes message and publishes----> [Kafka Topic] 

[Kafka Topic] <----consumes message------ [Engine Logic] 

[Engine Logic] -----computes, api-calls, publishes result message----> [Kafka Topic] 

[Kafka] ---???? somehow get result message to Web Tier---> [Web Tier] 

[Web Tier] -----renders HTML and sends http response---> 

使用非阻塞的網絡服務器(如碼頭)的HTTP請求將「保持打開」,但不會阻止。是否有可能以請求/響應方式使用Kafka?也就是說,網絡層可以向主題發佈消息,然後卡夫卡是否知道它必須提供響應?或者,網絡層的責任是輪詢一個主題並查看是否有響應?

我想我所問的是什麼是使用卡夫卡作爲Web界面和引擎邏輯所依賴的「接口」的最佳方式,以便Web層和引擎之間沒有直接的耦合?謝謝。

回答

0

我會說卡夫卡並不適合您的使用案例。

輪詢一個主題並查看是否有響應是Web層的責任。

,我預見到的幾個問題:

  1. 卡夫卡的設計要求,只有當傳送消息。在你的例子中,一旦數據到達第二個Kafka主題。它會坐在那裏,直到網絡層調查爲止。
  2. 沒有很好的方法來要求從卡夫卡,SO Question特定的消息。在您的網絡層中,如果您對Kafka服務器進行了輪詢,您可能會收到10條消息,您可能會得到0.如果您收到10條消息,則必須檢查並查看這10條消息中是否有您要查找的消息。如果他們不是,你將不得不再次輪詢。根據您完成特定引擎邏輯需要多長時間,可能會執行多次。

在上面引用的SO問題中,OP在評論中說他去了一個Mongo DB,所以他可以查詢特定的消息。