2017-04-25 19 views
1

對於使用kafka的Spark流式傳輸,我們有Directstream,它是無接收器的方法,並映射kafka分區來激發RDD分區。目前,我們有一個應用程序,我們使用Kafka Direct方法並在RDBMS中維護我們的偏移量,接收器減少火花蒸汽的方法

我們有類似的Kinesis嗎?當我閱讀spark-Kinesis集成的文檔時,感覺就像檢查點中存在差異。以下是我的一些問題

  1. 是否使用kinesis流映射kinesis碎片到RDD分區?如果我在傳入的RDD上使用forEachPartition,我能否在碎片級別維護有序處理?
  2. 從文檔中可以看出,kinesis在dynamoDB中保持單獨的檢查點?不能忽略它,並使用我們自己的偏移量管理?
  3. 在KinesisUtils.createStream api我看到,[初始位置]變量只需要LATEST或TRIM_HORIZON。在那種情況下,我怎麼能不能提供碎片地圖抵消,因爲我在卡夫卡案件提供?

如果我們的應用程序是冪等的,我們如何才能精確地處理一次處理?

回答

0

是否使用kinesis進行流式傳輸將kinesis分片映射到RDD分區?

否,不存在1:室壁運動碎片和RDD分區之間1映射作爲documentation指出:

有室壁運動流碎片的數量和RDD分區的數量之間沒有相關性/在輸入DStream處理期間跨Spark集羣創建的分片。這些是2個獨立的分區方案在碎片級別


我能保持有序的處理,如果我傳入RDD使用forEachPartition?

每創建的分區,爲了維持內部(不知道,可以幫助):

室壁運動數據處理每分區有序和AT-至少每個消息中出現一次。


從文檔它解釋說,室壁運動保持獨立的檢查站dynamoDB?不能忽略它,並使用我們自己的偏移量管理?

不,你受到Kinesis客戶端實現的約束,該實現使用DyanmoDB作爲後備存儲。

在KinesisUtils.createStream API我看到,對於[初始位置]變量只需要最新或TRIM_HORIZON。在那種情況下,我怎麼能不能提供碎片地圖抵消,因爲我在卡夫卡案件提供?

號沒有卡夫卡偏移提供相等。

正如你所看到的,目前執行的室壁運動API限制你。如果您需要偏移量存儲和恢復的靈活性,並且想要實現一次語義,請考慮與Kafka一起使用該解決方案。

+0

感謝您的答覆。在那種情況下,kinesis遠遠超過kafka。這對我的雲遷移來說是個大問題。我有兩個關鍵應用程序只使用一次火花流。 –