2017-04-06 44 views
0

我對使用卡夫卡有一些問題。卡夫卡:以同步方式並行處理

我有我的算法3個步驟:

  1. 計算所有點之間的距離(比方說,百萬點,以1米十億距離需要計算),並將其存儲
  2. 找出最大距離
  3. 除以最大

我使用卡夫卡所有其他存儲的距離,以產生所有的幾個點(I,J)的到主題的(I),然後我消耗這些對(II),I calcula距離,並重新產生(i,j,距離)到話題B(III)。最後,我消費了這個話題B,找到最大值(IV),並重新消耗話題B以將其存儲在具有(i,j,歸一化距離)(V)的文件中。

它適用於一個生產者,但添加更多時它會更復雜:您怎麼知道何時開始(IV)。爲此,您需要知道所有生成的數據已被消耗和重現。可能kafka不是這個的正確工具,儘管它解決了我的一些問題,例如分佈式磁盤空間和處理。

您是否有任何建議知道多個生產者或消費者何時在吃最後一個主題的信息,他們如何將它告訴其他主題消費者?

對於單個生產者我作爲最終的派用場:

producer.send(new ProducerRecord<String, String>(myTopic, "done")); 

所以,當消費者消費「完成」就可以停止。

+0

這可能是可能的,但我想指出你想實現的是批處理。 Kafka更多地被設計爲處理流式數據並以連續的方式傳送給接收者。也許使用像Apache Spark這樣的面向批處理的框架會更適合您的期望。 – ImbaBalboa

回答