2016-11-12 45 views
1

是否有可能notifyConsumer,一旦Producer發佈到Kafka topic的所有數據?Spark Streaming - 生產者完成後,如何通知消費者?

有可能相同的數據(有一些獨特的領域)可用於多個分區,所以我需要分組數據並做一些計算。

我想爲此使用Sliding window,但問題仍然是我們不知道生產者是否完成發佈數據?

消息數量爲around 50K,如果我們有更好的配置代理,卡夫卡可以在幾秒內處理50K messages[Single partition]

目前,我們計劃有多個分區來根據Default Partitioner拆分數據。

任何有效的方法來處理?

更新:

每15分鐘一次,生產者得到的數據,並開始發佈數據卡夫卡的話題,我相信這是一個用例進行批處理,但是這是我們目前的設計。

+0

當你在談論流時,不確定「done」是什麼意思。是不是他們是無限期的流的整個點?如果您的製作人正在生成批量消息,並且您關心批量邊界,那麼您可能會發布「批量結束」消息。 –

+0

@JoePallas:我沒有明白,你是什麼意思,發佈「批量結束」消息。 – Shankar

+1

生產者知道它何時完成一批處理,但消費者不知道它是否已經看到批處理中的所有消息。如果生產者在發佈批次的所有數據後發佈特殊的「批量結束」消息,則消費者可以等到在處理批次之前看到該消息。如果您有多個分區,這可能會變得更加複雜;標記必須去每個分區。 –

回答

1

Spark Streaming不起作用。它的工作方式是在每個批次間隔內流入和處理無限數據流。這意味着如果你想發出一個邏輯「批量結束」的信號,你需要發送一個消息,指出這批數據已經結束,允許你將處理過的消息發送到你想要的輸出接收器。

您可以實現這一目標的一種方法是使用有狀態的流,它可以跨批次聚合數據並允許您在批處理間隔之間保持狀態。

+0

謝謝,你能給更多的信息或鏈接有狀態流,所以我可以嘗試一些.. – Shankar

+0

@Shankar你可以閱讀[這篇博文](http://asyncified.io/2016/07/31/exploring-stateful -streaming-with-apache-spark)(免責聲明:我是作者)。 –

+0

這個博客非常有用,謝謝你。 – Shankar

相關問題