如何设计近实时数据流过滤解决方案以将大量数据提供给Web客户端?

问题描述

我在将包含一些用户统计事件的大型CSV文件传送到Web客户端时遇到问题,通过这样做,我需要处理和过滤数据以实现某些指标。这应该接近实时,因为数据源将始终具有数据。

我进行了一些调查,但是我不确定如何解决此问题。我听到了data streaming or push-based data streaming,但不确定如何在向消费者提供结果之前,如何使用例如Kafka在代理中进行流处理或筛选。

解决此问题时,第一步,我打算使用spliterator文件拆分为多个块,然后将其发送到分区中,但这是我要做的部分m感到困惑:过滤的方式和位置?

让我尽我所能来解释这个令人困惑的部分:好的,我读取带有大块的文件不是没有内存不足异常,而是应用一些过滤器,因为数据是未排序的,所以我认为我需要完整的数据再次导致内存异常。因此,我不确定是否需要对分区中的每个卡盘应用过滤器并合并结果,在这种情况下,我认为我需要再次对合并后的结果应用相同的过滤器。 在这种情况下使用Kafka时,这是数据流处理中的想法吗?

为了更具体一点,我们假设这是用户活动数据,我需要找到用户会话的平均时长。在这种情况下,我的用户会话分散在几个分区中的块中。我是否需要在每个分区的每个块中找到平均值并重新计算?或者,如果我需要过滤关注的用户在这种情况下如何累积结果?

解决方法

在代理级别不进行过滤。例如,如果打算使用Kafka Streams,则需要创建一个单独的应用程序,该应用程序执行过滤和聚合逻辑。您可以读取文件并将其逐行发送到Kafka。您的应用程序将从主题中读取数据并执行过滤。如果需要计算每个用户的平均会话数,则应将用户的标识符设置为键,以便具有相同ID的用户将进入同一分区。在这种情况下,您可以拥有该应用程序的多个实例,每个实例将从其分区读取并计算统计信息。

问题在于您的任务是关于批量处理而不是流式处理。因此,很难理解文件的结尾在哪里以及应该停止处理。在流式传输中,通常使用时间窗口来计算统计信息。

另一种可能性是让您在KSQL中实现逻辑。

希望这为您提供了前进的方向。