透明流和批处理

问题描述 投票:0回答:2

我对流和批量处理的世界还很陌生,并试图理解概念和演讲。非常有可能我的问题的答案众所周知,很容易找到甚至在这里回答了一百次,但我无法找到它。

的背景:

我正在一个大型科学项目(核聚变研究)工作,我们在实验过程中产生了大量的测量数据。这些数据主要是标记有纳秒时间戳的样本流,其中样本可以是单个ADC值,通过一系列数据,通过深度结构化数据(从1位布尔到64位双精度,最多数百个条目)浮动)到原始高清视频帧甚至是字符串文本消息。如果我理解正确的术语,我会将我们的数据视为“表格数据”。

我们正在使用大多数自制软件解决方案,从数据采集到简单的在线(流媒体)分析(如缩放,子采样等),再到我们自己的数据存储,管理和访问设施。

鉴于操作的规模和维护所有这些实现的努力,我们正在研究使用标准框架和工具来完成更多任务的可能性。

我的问题:

特别是在这个阶段,我们需要对实时/在线/实时数据进行越来越多的软化(自动和手动)数据分析,以及“事后”对“历史”数据进行离线/批量分析。在此,我试图了解现有的分析框架,如Spark,Flink,Storm等(可能由Kafka,Pulsar等消息队列支持)是否以及如何支持场景,其中

  • 数据流入/流入平台/框架,附加了诸如URL或ID之类的标识符
  • 平台与集成或外部存储交互以持久保存与标识符相关联的流数据(多年)
  • 分析流程现在可以透明地查询/分析由标识符和任意(开放或关闭)时间窗口寻址的数据,并且框架支持从后端存储或从数据采集到现场进行分析的数据批次/样本

简单地将在线数据流式传输到存储中并从那里查询似乎没有选择,因为我们需要原始数据和分析数据进行实时监控和实验的实时反馈控制。此外,让用户以不同的方式从存储中查询实时输入信号或历史批次并不理想,因为我们的物理学家大多数都不是数据科学家,我们希望保持这些“技术性”远离它们,并且理想的是完全相同的算法应该用于分析以前实验中的新实时数据和旧存储数据。

Sitenotes;

  • 我们谈论的是每秒千兆比特10的范围内的偷看数据负载,以秒为单位的时间增加到几分钟 - 这可以由候选人处理吗?
  • 我们正在使用纳秒级分辨率的时间戳,甚至考虑微微 - 如果我能正确地解决这个问题,这会对可能的候选者列表造成一些限制吗?

如果有人能够理解我的问题并为我阐明这个话题,我将非常感激:-)

非常感谢和亲切的问候,Beppo

apache-spark apache-flink apache-storm apache-pulsar
2个回答
2
投票

我认为没有人会说“是的,框架X可以肯定地处理你的工作量”,因为它很大程度上取决于你的消息处理需要什么,例如关于消息传递可靠性,以及如何对数据流进行分区。

您可能感兴趣的BenchmarkingDistributedStreamProcessingEngines。本文使用的是几年前的Storm / Flink / Spark版本(看起来它们是在2016年发布的),但也许作者愿意让你使用他们的基准来评估这三个框架的新版本?

流分析的一个非常常见的设置是使用数据源 - > Kafka / Pulsar - >分析框架 - >长期数据存储。这将处理与数据摄取分离,并允许您执行诸如重新处理历史数据之类的内容,就像它是新的一样。

我认为您的第一步应该是看看您是否可以通过Kafka / Pulsar获得所需的数据量。可以手动生成测试集,也可以从生产环境中获取您认为可能具有代表性的一些数据,并查看是否可以通过Kafka / Pulsar以您需要的吞吐量/延迟量。

请记住考虑对数据进行分区。如果您的某些数据流可以独立处理(即排序无关紧要),则不应将它们放在相同的分区中。例如,可能没有理由混合传感器测量和视频馈送流。如果您可以将数据分成独立的流,则不太可能在Kafka / Pulsar和分析框架中遇到瓶颈。单独的数据流还允许您更好地并行化分析框架中的处理,因为您可以运行,例如不同机器上的视频输入和传感器处理。

一旦你知道是否可以通过Kafka / Pulsar获得足够的吞吐量,你应该为3个框架中的每一个编写一个小例子。首先,我会接收并删除Kafka / Pulsar的数据,这应该让您及早了解Kafka / Pulsar - >分析路径中是否存在瓶颈。之后,您可以扩展示例以使用示例数据执行一些有趣的操作,例如:像生产中你想做的那样进行一些处理。

您还需要考虑数据流所需的哪种处理保证。通常,您将为保证至少一次或完全一次处理而支付性能损失。对于某些类型的数据(例如视频输入),偶尔丢失消息可能是可以的。确定所需的保证后,您可以适当地配置分析框架(例如,在Storm中禁用acking),并尝试对测试数据进行基准测试。

只是更明确地回答一些问题:

实时数据分析/监控用例听起来很适合Storm / Flink系统。直接将它连接到Kafka / Pulsar,然后做你需要的任何分析听起来它可能适合你。

历史数据的重新处理将取决于您需要执行何种查询。如果您只需要一个时间间隔+ id,您可以使用Kafka加上过滤器或适当的分区来实现。 Kafka允许您在特定时间戳开始处理,如果数据按ID分区,或者您将其作为分析的第一步过滤,则可以从提供的时间戳开始,并在时间窗口之外点击消息时停止处理。这仅适用于您感兴趣的时间戳是将消息添加到Kafka的情况。我也不相信Kafka在它生成的时间戳上支持低于毫秒的分辨率。

如果您需要执行更高级的查询(例如,您需要查看传感器生成的时间戳),您可以使用CassandraElasticsearchSolr作为永久数据存储。您还需要研究如何将这些系统中的数据恢复到分析系统中。例如,我相信Spark附带了一个用于从Elasticsearch读取的连接器,而Elasticsearch为Storm提供了一个连接器。您应该检查数据存储/分析系统组合是否存在此类连接器,或者是否愿意编写自己的连接器。

编辑:详细说明以回答您的评论。

我不知道Kafka或Pulsar支持用户指定的时间戳,但果然,他们both do。我不认为Pulsar支持亚毫秒时间戳吗?

你描述的想法绝对可以得到Kafka的支持。

您需要的是能够在特定时间戳启动Kafka / Pulsar客户端,并向前阅读。 Pulsar似乎还不支持这一点,但Kafka确实如此。

您需要保证在将数据写入分区时,它们按时间戳的顺序到达。这意味着您不允许用时间戳10写第一个消息1,然后用时间戳5写消息2。

如果您可以确保为Kafka编写消息,那么您描述的示例将起作用。然后你可以说“昨晚午夜开始时间戳”,而卡夫卡将从那里开始。当实时数据进入时,它将接收它并将其添加到其日志的末尾。当消费者/分析框架已经读取了从午夜到当前时间的所有数据时,它将开始等待新的(实时)数据到达,并在其进入​​时对其进行处理。然后,您可以在分析框架中编写自定义代码当它到达带有时间戳'明天晚上'的第一条消息时,确保它停止处理。

关于亚毫秒时间戳的支持,我不认为Kafka或Pulsar会开箱即用,但你可以很容易地解决它。只需将消息中的亚毫秒时间戳作为自定义字段。如果你想从时间戳9ms 10ns,你要求Kafka从9ms开始,并使用分析框架中的过滤器将所有消息丢弃在9ms到9ms 10ns之间。


0
投票

请允许我就Apache Pulsar如何帮助满足您的一些要求添加以下建议。让人回味无穷。

“数据流入/流入平台/框架,附加了URL或ID等标识符”

您可能希望查看Pulsar Functions,它允许您编写在发布到主题的每条消息上执行的简单函数(在Java或Python中)。它们是此类数据扩充用例的理想选择。

平台与集成或外部存储交互以持久保存与标识符相关联的流数据(多年)

Pulsar最近添加了tiered-storage,允许您在S3,Azure Blob Store或Google Cloud存储中保留事件流。这样您就可以将数据保存在廉价且可靠的数据存储中多年

分析流程现在可以透明地查询/分析由标识符和任意(开放或关闭)时间窗口寻址的数据,并且框架支持从后端存储或从数据采集到现场进行分析的数据批次/样本

Apache Pulsar还在qstxswpoi中添加了Presto查询引擎,该引擎允许您查询给定时间段内的数据(包括来自分层存储的数据)并将其放入主题进行处理。

© www.soinside.com 2019 - 2024. All rights reserved.