【问题标题】:Apache Flink relating/caching data optionsApache Flink 相关/缓存数据选项
【发布时间】:2020-04-11 20:34:31
【问题描述】:

这是一个非常广泛的问题,我是 Flink 的新手,正在研究将其用作当前分析引擎的替代品的可能性。

场景是,从各种设备采集数据,接收到的数据为 JSON 编码的字符串,格式为 {“location.attribute”:value, “TimeStamp”:value}

例如,接收一个位置的单一可追溯性代码,然后以实时流的形式接收各种过程参数。分析将在过程参数上运行,但输出需要包含与可追溯性代码的关系。例如 {“location.alarm”:value, “location.traceability”:value, “TimeStamp”:value}

Flink 使用什么方法来缓存值,在这种情况下是当前的可追溯性代码,同时对稍后收到的其他参数运行分析?

我主要只是在寻找要研究的领域,因为到目前为止我还没有找到任何这种情况的例子。可能不是 Flink 能处理的那种进程

【问题讨论】:

    标签: caching apache-flink flink-streaming


    【解决方案1】:

    用 Flink 做这种事情的一种自然方法是按位置对流进行键控,然后使用ProcessFunction(或RichFlatMapFunction)中的键控状态来存储部分结果,直到准备好发出输出。

    使用键控流,您可以保证具有相同键的每个事件都将由同一个实例处理。然后,您可以使用keyed state(实际上是一个分片键/值存储)来存储每个键的信息。

    Apache Flink training 包括一些关于keyed streamsworking with keyed state 以及an exercise or two 的解释性材料,探索如何使用这些机制大致完成您需要的工作。

    或者,您可以使用 Table 或 SQL API 执行此操作,并将其实现为流与自身的连接。

    【讨论】:

    • 感谢您的回复。这个答案让我走了一半,但仍然让我感到困惑的部分如下。键入位置不是问题,但是,当使用键入状态时,这似乎只允许缓存单个属性值。因此,如果针对该位置,我想缓存可追溯性代码和电压值的集合,直到接收到其他一些指示进程结束的属性,似乎我无法管理同一范围内所有的键控状态。就像一个分片的用户定义字典
    • 为了进一步澄清,我收到一个可追溯代码属性,然后是一个激活属性,然后是包含设备电压的多条消息。我只想在 active 等于 true 时缓存那些电压。当它不再处于活动状态时,我想对电压进行一些评估并返回结果以及相关的可追溯性代码。使用键控状态,我看不出这些东西是如何相互访问的
    • 听起来你需要按时间顺序处理一些属性。您是否保证它们会按顺序到达,还是需要小心分类?
    • 我不明白将不同事件连接在一起的挑战是什么。不是所有相互关联的消息都有某种共同的标识符吗?
    • 你只需要小心确保它是一个有效的 POJO 类 -- ci.apache.org/projects/flink/flink-docs-stable/dev/… -- 或者一个 Avro 类,这样 Flink 就能够为你在有状态的升级期间你可能会在未来做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多