我有一个问题,那就是将一个包含一些用户统计事件的大型csv文件传递到web客户机,通过这样做,我需要处理和过滤数据以满足某些指标。这应该是接近实时的,因为数据源总是有数据。
我已经调查了一点,但我不知道如何处理这个问题。我听说了 data streaming or push-based data streaming
但我不确定如何使用kafka在代理中进行流处理或过滤,然后再将结果提供给消费者。
当我处理这个问题时,作为第一步,我计划使用 spliterator
,然后将这些块发送到分区中,但这是我感到困惑的部分:如何以及在何处进行过滤?
让我尽我所能地解释一下令人困惑的部分:好吧,我读取带有块的文件不是为了有内存不足的异常,而是为了应用一些过滤器,因为数据是未排序的,我想我需要整个数据,这可能会再次导致内存异常。所以我不确定是否需要对分区中的每个chuck应用filter并合并结果,在这种情况下,我想我需要对合并的结果再次应用相同的filter。在本例中使用kafka时,这是数据流处理的思想吗?
为了更具体,假设这是用户活动数据,我需要找到用户会话的平均长度。在本例中,用户会话分散在几个分区中的块中。我是否需要在每个分区的每个块中找到平均值并再次计算?或者,如果我需要过滤跟踪的用户,在这种情况下,我如何累积结果?
1条答案
按热度按时间jxct1oxe1#
筛选不会发生在代理级别。例如,如果计划使用kafka流,则需要创建一个单独的应用程序,该应用程序执行过滤和聚合逻辑。你可以阅读你的文件,然后逐行发送给Kafka。应用程序将从主题中读取数据并执行过滤。如果需要计算每个用户的平均会话数,则应将用户的标识符设置为键,以便具有相同id的用户将转到相同的分区。在这种情况下,您可以有多个应用程序示例,每个示例都将从其分区中读取数据并计算统计信息。
问题是您的任务是批量处理而不是流式处理。因此,很难理解文件的结尾在哪里,您应该停止处理。在流媒体中,通常使用时间窗口计算统计信息。
另一种可能性是在ksql中实现逻辑。
希望这能让你知道如何继续前进。