gpt4 book ai didi

session - apache flink session 支持

转载 作者:行者123 更新时间:2023-12-01 11:29:48 24 4
gpt4 key购买 nike

我正在研究将 Apache Flink Streaming 用于我们的 ETL 和机器学习平台。我还没有弄清楚的是如何将事件流式传输到“ session ”中。更具描述性:所有事件都包含一个 session ID,为了丰富数据,我需要将属于一个 session 的所有事件组合在一起。请考虑到事件是连续流入的(因此没有批处理支持,之后你可以简单地做一个 groupBy 例如)

一种可能的解决方案是维护 session 的 LRU 缓存并将所有传入事件排序到它们的关联 session 中。然后在每个 session X 分钟不活动后,可以“关闭”或从缓存中逐出 session 。问题是如何在 Multi-Tenancy 系统中处理这个缓存; flink 是否具有分布式缓存的概念,或者它是否包含某种智能负载均衡器,其中事件被定向到网格中的同一分区?

更一般地说:使用流式 api 建立 session 支持的最佳方法(用例和陷阱)是什么?这可能吗?以及如何处理重播流? (即从一个特定的时间点开始,在该时间点,事件流入未完成的 session (即,事件在时间点之前)

对任何反馈、想法和/或指示感兴趣。

提前致谢

最佳答案

我创建了一个非常接近您要求的示例:https://gist.github.com/aljoscha/91b6422114eac814479f

我使用 Tuple2<Integer,String>来模拟数据。整数是 session ID,而字符串是我们键入(分区)数据的某个字段。

我建议你先看看main()方法,你可以看到程序的流程。其他位是自定义窗口定义 SessionWindow一个窗口分配器和 SessionTrigger .这基本上实现了您建议的缓存的想法。窗口根据分配的窗口和 key 保存在缓冲区中。一旦 Trigger 触发,我们就会处理窗口并逐出内容。

当触发器接收到一个元素时,它会注册一个 future 10 秒的计时器。如果到那时没有新元素到达,触发器将触发。如果一个新元素在该时间窗口内到达,它将注册一个新计时器,这将替换旧计时器,因为触发器一次只能有一个事件计时器。

此外,这还使用了所谓的处理时间窗口。这也可以更改为基于事件时间 的触发,即元素的时间戳。

关于session - apache flink session 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33451121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com