Redis Streams與Spark的完美結合

來源:Redislabs
做者:Roshan Kumar
翻譯:Kevin  (公衆號:中間件小哥)redis

最近,我有幸在 Spark +AI 峯會上發表了題目爲「Redis + Structured Streaming:擴展您的持續應用的完美組合」的演講。數據庫

我對這個主題的興趣是由 Apache Spark 和 Redis 在過去幾個月中引入的新功能引發的。根據我以前使用 Apache Spark 的經驗,我很欣賞它在運行批處理時的優雅,而且它在 2.0 版本中引入 Structured Streaming 是在這個方向上的進一步發展。數據結構

與此同時,Redis 最近宣佈了用於管理流數據的新數據結構,稱爲「Streams」。Redis Streams 提供了生產者和消費者之間的異步通訊功能以及持久性、回顧性查詢功能和相似於 Apache Kafka 的橫向擴展選項。從本質上講,Redis 經過Streams 提供了一個輕便、快速、易於管理的流數據庫,使數據工程師們受益良多。異步

此外,開發 Spark-Redis 庫是爲了使 Redis 能夠做爲彈性分佈式數據集(RDD)使用。由於如今有了 Structured Streaming 和 Redis Streams,咱們決定擴展 Spark-Redis 庫將 Redis Streams 集成爲 Apache Spark Structured Streaming 的數據源。分佈式

在上個月的演講中,我演示瞭如何在 Redis Streams 中收集用戶活動數據並將其下載到 Apache Spark 進行實時數據分析。我開發了一個小型的適合移動設備的 Node.js 應用程序,在這個程序中人們能夠點擊投票給他們最喜歡的狗來進行有趣的比賽。spa

這是一場艱苦的戰鬥,有幾個觀衆甚至是黑客頗有創意地攻擊了個人應用程序。他們使用「頁面檢查」選項更改了 HTML 按鈕名稱試圖弄亂應用的顯示。但最終他們失敗了,由於 Redis Streams,Apache Spark,Spark-Redis 庫和個人代碼都足夠的強大,能夠有效地應對這些攻擊。翻譯

在我演講期間和以後觀衆還詢問了一些有趣的問題,例如:視頻

1. 若是數據處理速度低於 Redis Streams 接收數據的速率,該如何擴展?中間件

個人回答:配置一個 Redis Streams 的消費者組,將每一個 Spark 做業做爲屬於該組的一個消費者,這樣每一個做業都會得到一組獨有的數據,將輸出模式設置爲「更新」很是重要,這樣每一個做業都不會覆蓋其餘做業的數據提交。blog

2. 若是我從新啓動 Spark 做業,Redis Streams 中的數據會發生什麼變化?

個人回答:RedisStreams 持久化數據。所以您的 Spark 做業不會遺漏任何數據,若是從新啓動 Spark 做業,它將從以前中止的位置提取數據。

3. 我能夠用 Python 開發個人 Spark 應用程序嗎?(個人演示是用 Scala 編寫的)

個人回答:是的,你能夠,請參閱 GitHub 上的 Spark-Redis 文檔。

4. 我能夠在雲上部署 Redis Streams 嗎?

個人回答:是的,Streams 只是 Redis 中的另外一個數據結構,從 5.0 版開始內置於 Redis 中,最快捷的方式是在 https://redislabs.com/get-sta... 上註冊。

我在峯會上的主要收穫是瞭解到人們對連續處理和數據流的興趣日益濃厚。根據你們的需求,咱們在 InfoQ 上發佈了一篇關於此主題的更詳細的文章,在其中提供了有關如何設置 Redis Streams 和 Apache Spark 以及使用 Spark-Redis 庫進行鏈接的詳細信息,你們也能夠隨時查看我演講的完整視頻。

更多優質中間件技術資訊/原創/翻譯文章/資料/乾貨,請關注「中間件小哥」公衆號!

相關文章
相關標籤/搜索