当前位置: 首页 > 知识库问答 >
问题:

使用侧面输出共享运算符子任务状态

昌招
2023-03-14

我正在实现一个流式应用程序,其中一个有状态运算符正试图捕获“所有者有项目”的关系。每个所有者键入的状态由有关所有者和每个项目的详细信息组成。项目的所有权可以更改,我希望能够将每个项目与其正确的所有者相关联。由于不同所有者的操作员状态可能位于不同的子任务中,并且这些子任务旨在独立运行,因此我想知道共享状态的最佳方式是什么。我能想到的一个解决方案是从子任务的侧输出创建一个键控数据流,并将其发送给正确的所有者并从原始所有者中清除状态。本质上:

  1. 子任务K1,状态为关于具有Item1、Item2、…、ItemN的OldOwner

由于侧输出的目的非常不同(日志记录等),我想知道这是否可行。与常规数据流相同的容错保证是否适用于侧输出?子任务中可以缓冲多少侧面输出消息有限制吗?

另一种方法可能是获取第一个子任务的输出并将其反馈给同一个操作符。理论上,这两种方法都违反了flink作业是DAG的属性,尽管在我的用例中,永远不会有循环数据传输。

共有1个答案

荆亦
2023-03-14

您的建议将在拓扑中创建一个循环,因为您需要将事件从侧面输出发送回同一操作符的相同/不同子任务。

您实际上想要的是在Flink中支持多键/多状态交易。Flink本身并没有对其提供开箱即用的支持。但是,Flink提供了在其之上构建此类功能所需的所有工具。事实上,流式账本正是这样做的。它允许您在Flink之上仅使用一次处理保证来执行多状态交易。

 类似资料:
  • 这个问题在这里已经被问到了,但是两年过去了,我想知道是否有什么改变。 我有一个用例,我希望在两个Flink操作符之间共享状态: > A流是主流,它连续流动 流B只是富集数据的数据集。它很大(几个GBs),因此不能作为广播流。 流B有一个与之相关联的运算符(FlatMap,但可以是任何实际的),它充当状态加载器,并将浓缩数据作为列表状态加载到RocksDB中。 null

  • C++ 重载运算符和重载函数 C++ 能够使用流提取运算符 >> 和流插入运算符 << 来输入和输出内置的数据类型。您可以重载流提取运算符和流插入运算符来操作对象等用户自定义的数据类型。 在这里,有一点很重要,我们需要把运算符重载函数声明为类的友元函数,这样我们就能不用创建对象而直接调用函数。 下面的实例演示了如何重载提取运算符 >> 和插入运算符 <<。#include <iostream> u

  • 我计划使用cassandra作为我的应用程序的nosql数据存储。我的用例之一是更新用户的“余额”。假设每个用户的余额存储为一个关键UID_balance。现在,如果我的应用程序想要更新多个用户的余额,我将如何处理原子性? 我想,在某个时刻,应用程序基本上将执行以下操作: 现在,这里有几个问题: 与cassandra的连接可能会中断,导致代码只更新少数用户的余额 在步骤2和4之间,可能有另一个进程

  • 问题内容: 两个共享库liba.so和libb.so。liba.so使用libb.so。所有c文件都使用-fPIC编译。链接使用- shared。当我们在liba.so上调用dlopen时,它无法在libb.so中找到符号…我们得到“未定义符号”错误。我们可以dlopen libb.so没有错误。我们知道liba正在找到libb,因为我们没有得到文件未找到错误。删除libb.so时,出现文件未找到

  • 我想知道在Flink中是否可以在运营商之间共享状态。 比方说,我在一个操作符上按键进行分区,我需要一个分区的状态(无论出于什么原因)(图1.a),或者我需要下游操作符中操作符的状态(图1.b)。 我知道可以将记录广播到所有分区。因此,如果在记录中包含操作符的内部状态,则可以与下游操作符共享内部状态 然而,这可能是一个昂贵的操作,而不是简单地让op1专门请求op2状态。 可查询状态的最新发展是朝着这

  • 模板输出进可以使用几个运算符: 加法: {$a+$b} 减法: {$a-$b} 乘法: {$a \* $b} 除法: {$a/$b} 取余: {$a%$b} ++: {$a++} {++$a} --: {$a--} {--$a} 综合运算: {$a+$b+$c*$d}