Redis Streams与Spark的完美结合

来源:Redislabsredis

做者:Roshan Kumar数据库

翻译:Kevin  (公众号:中间件小哥)数据结构

最近,我有幸在 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 应用程序,在这个程序中人们能够点击投票给他们最喜欢的狗来进行有趣的比赛。中间件

这是一场艰苦的战斗,有几个观众甚至是黑客颇有创意地攻击了个人应用程序。他们使用“页面检查”选项更改了 HTML 按钮名称试图弄乱应用的显示。但最终他们失败了,由于 Redis Streams,Apache Spark,Spark-Redis 库和个人代码都足够的强大,能够有效地应对这些攻击。blog

 

 

在我演讲期间和以后观众还询问了一些有趣的问题,例如:开发

1. 若是数据处理速度低于 Redis Streams 接收数据的速率,该如何扩展?

个人回答:配置一个 Redis Streams 的消费者组,将每一个 Spark 做业做为属于该组的一个消费者,这样每一个做业都会得到一组独有的数据,将输出模式设置为“更新”很是重要,这样每一个做业都不会覆盖其余做业的数据提交。

 

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-started 上注册。

 

我在峰会上的主要收获是了解到人们对连续处理和数据流的兴趣日益浓厚。根据你们的需求,咱们在 InfoQ 上发布了一篇关于此主题的更详细的文章,在其中提供了有关如何设置 Redis Streams 和 Apache Spark 以及使用 Spark-Redis 库进行链接的详细信息,你们也能够随时查看我演讲的完整视频。

 

更多优质中间件技术资讯/原创/翻译文章/资料/干货,请关注“中间件小哥”公众号!

相关文章
相关标签/搜索