dot 你所在城市即将举办一场关于快速未来的盛会。

加入我们,参加 Redis 发布会

Redis Streams + Apache Spark Structured Streaming

近日,我荣幸地在 Spark+AI 峰会上发表了我的演讲“Redis + Structured Streaming:一种可扩展连续应用程序的完美组合”。

我前几个月对 Apache Spark 和 Redis 中引入的新功能产生了兴趣。基于我对 Apache Spark 的之前使用,我了解到它运行批处理的优雅之处,2.0 版本引入的结构化流处理是该方向的进一步发展。

同时,Redis 最近宣布了名为“Streams”的新数据结构,用于管理流数据。Redis Streams 提供生产者和消费者的异步通信,其附加功能如持久性、回顾查询和扩展选项与 Apache Kafka 类似。本质上,Redis 使用 Streams 为数据工程师提供了一个轻量、快速且易于管理的流式数据库。

此外,Spark-Redis 库被开发出来,可支持 Redis 数据结构作为弹性分布式数据集 (RDD)。现在有了结构化流处理和 Redis Streams,我们决定扩展 Spark-Redis 库来将 Redis Streams 集成作为 Apache Spark 结构化流处理的数据源。

在上个月的演讲中,我展示了如何在 Redis Streams 中收集用户活动数据并将其传输到 Apache Spark 以进行实时数据分析。我开发了一个小型、适合移动设备的 Node.js 应用,人们可以在其中点击他们最喜欢的狗狗,我用它在我的会话中举办了一场趣味比赛。这是一场激烈的比赛,现场甚至有人发挥创意,黑进了我的应用程序。他们使用“页面检查”选项更改了 HTML 按钮名称并尝试搞乱我的演示。但最终,Redis Streams、Apache Spark、Spark-Redis 库以及我的代码都足够健壮,足以有效地处理这些更改。

在演讲期间和演讲结束后,观众还提出了一些有趣的问题,例如

  1. 如果我的数据处理速度比 Redis Streams 接收数据的速度慢,我该如何进行扩展?我的答案:配置一个消费者组,并将每个 Spark 作业作为属于该组的不同的 Redis Streams 消费者来运行。这样,每个作业都会获得一组独占数据。重要的是将输出模式设置为“更新”,以便每个作业不会覆盖其他作业的数据提交。
  2. 如果我重新启动 Spark 作业,Redis Streams 中的数据会发生什么?我的答案:Redis Streams 持久化数据。因此,您的 Spark 作业不会遗漏任何数据。如果您重新启动 Spark 作业,它将从它离开的地方提取数据。
  3. 我可以在 Python 中开发我的 Spark 应用吗?(我的演示是用 Scala 编写的)我的答案:可以。请查看我们 Spark-Redis 文档上的 GitHub。
  4. 是否能够将 Redis Stream 部署到云端?我的答案:可以,Stream 只是 Redis 中的另一种数据结构,自发行版 5.0 起内置在 Redis 中。最快的启动方式是在 免费试用中注册。

我从峰会中获得的主要收获是,人们对连续处理和数据流的兴趣越来越浓。由于需求较高,我们在 InfoQ 中发布了 关于此主题的更详细文章,其中提供了设置 Redis Streams 和 Apache Spark 以及使用 Spark-Redis 库连接这两个库的详尽指南。您还可以随时在此处查看我演示文稿的 完整视频