繁体   English   中英

Spark结构化流媒体 - 限制? (源性能,不支持的操作,Spark UI)

[英]Spark Structured Streaming - Limitations? (Source Performance, Unsupported Operations, Spark UI)

我已经开始探索Spark Structured Streaming来编写一些在此之前一直使用DStreams的应用程序。

我试图理解结构化流的限制,因为我已经开始使用它,但想知道回退,如果有的话。

Q1。 对于结构化流媒体应用程序中的每个接收器,它将独立地从源(例如Kafka)读取。 这意味着如果您从一个主题A中读取并写入3个位置(例如ES,Kafka,S3),它实际上将建立3个彼此独立的源连接

这会降低性能吗? 因为它需要3个独立的连接而不是一个(DStream方法)

Q2。 我知道加入2个流数据集是不受支持的 如何在2个流上执行计算?

如果我有来自主题A的数据和来自主题B的其他数据,是否可以以某种方式对这两者进行计算?

Q3。 在Spark Streaming UI中,有一个Streaming选项卡,用于指标和查看应用程序的吞吐量。 在结构化流中,此功能不再可用。

为什么是这样? 是否打算以编程方式获取所有指标并推送到单独的监控服务?

对于结构化流媒体应用程序中的每个接收器,它将独立地从源(例如Kafka)读取。 这意味着如果您从一个主题A中读取并写入3个位置(例如ES,Kafka,S3),它实际上将建立3个彼此独立的源连接。

开箱即用,是的。 每个Sink描述不同的执行流程。 但是,您可以通过不使用内置接收器并创建自己的自定义接收器来控制这一点,这可以控制您执行写操作的方式。

这会降低性能吗? 因为它需要3个独立的连接而不是一个(DStream方法)

大概。 您通常不希望一遍又一遍地阅读和处理相同的事情,因为您有相同来源的多个接收器。 再次,你可以通过建立自己的接收器(这不应该是太多的工作)来适应这一点

Q2。 我知道加入2个流数据集是不受支持的。 如何在2个流上执行计算?

从Spark 2.3开始,支持OOTB。

Q3。 在Spark Streaming UI中,有一个Streaming选项卡,用于指标和查看应用程序的吞吐量。 在结构化流中,此功能不再可用。 为什么是这样? 是否打算以编程方式获取所有指标并推送到单独的监控服务?

你是对的。 您在结构化流中拥有的花哨UI在Spark中尚不存在。 我问Michael Armburst这个问题并且他的回答是“优先级”,他们根本没有时间投入工作来创建像Spark Streaming那样花哨的东西,因为他们想要挤出更多的功能。如果您需要,OSS可以随时自行提供缺失的部分。

总而言之,Structured Streaming是Spark的未来。 没有更多的工作投入DStreams。 对于高吞吐量系统,我可以说加入结构化流媒体的潮流有很大的好处。 我已经在2.1发布时切换,这绝对是一个性能提升,特别是在有状态流管道领域。

TL; DR; 结构化流媒体的设计考虑了不同的目标,虽然我们倾向于将DStream “遗留”,但并没有直接替代。 比较它们有点毫无意义,因为随着它们的发展,它们与原始Spark模型的差异越来越大。

DStreams可用于实现许多结构化流媒体功能(只需检查Apache Beam ),但它远非微不足道。

同时,差异重申了我们从RDD与DataFrame讨论中所了解的内容 - 您会以通用性和自由度为代价获得高度表达,优化和简洁的API(并非所有问题都可以在SQL中构建 - 就像API一样)。

此外,它仍然是相当新的,而且大多实验,所以有些功能可能尚未实现。

  1. 这会降低性能吗? 因为它需要3个独立的连接而不是一个(DStream方法)

    在正常情况下,它将提高性能,并排除基于传统接收器的源,它与Kafka DStreams没有什么不同。

  2. 我知道加入2个流数据集是不受支持的

    支持的流连接有很多种。 请参阅流式查询中的连接支持矩阵

  3. n结构化流式传输不再可用。

    Spark UI通过UI提供大量数据。 使用 Jacek Laskowski的 Web UI检查监视结构化流应用程序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM