Hi all,
请教一下,KeyedCoProcessFunction比较特殊,有两个输入,对应两个ProcessElement方法。 问题1: 如果在这两个Process方法中都对同一个MapState进行修改,是否会存在资源竞争的关系? 还是这两个方法是顺序执行的? 问题2: 虽然有不同的key,但函数只有一个实例,其中的MapState应该也是一个实例,那么不同key下的 Process过程是并发执行的还是顺序执行的,会竞争MapState资源吗? |
Hi,
问题1&2 都不存在多线程的问题。Flink底层来保证这些方法都是在同一个线程串行执行的。 shizk233 <[hidden email]> 于2020年8月20日周四 下午2:22写道: > Hi all, > > 请教一下,KeyedCoProcessFunction比较特殊,有两个输入,对应两个ProcessElement方法。 > 问题1: > 如果在这两个Process方法中都对同一个MapState进行修改,是否会存在资源竞争的关系? > 还是这两个方法是顺序执行的? > > 问题2: > 虽然有不同的key,但函数只有一个实例,其中的MapState应该也是一个实例,那么不同key下的 > Process过程是并发执行的还是顺序执行的,会竞争MapState资源吗? > -- Best, Benchao Li |
hi, 你可以看下这个,讲的挺详细的 https://blog.csdn.net/yuchuanchen/article/details/105677408
------------------ 原始邮件 ------------------ 发件人: "user-zh" <[hidden email]>; 发送时间: 2020年8月20日(星期四) 下午4:39 收件人: "user-zh"<[hidden email]>; 主题: Re: KeyedCoProcessFunction中的状态数据是否存在资源竞争的可能 Hi, 问题1&2 都不存在多线程的问题。Flink底层来保证这些方法都是在同一个线程串行执行的。 shizk233 <[hidden email]> 于2020年8月20日周四 下午2:22写道: > Hi all, > > 请教一下,KeyedCoProcessFunction比较特殊,有两个输入,对应两个ProcessElement方法。 > 问题1: > 如果在这两个Process方法中都对同一个MapState进行修改,是否会存在资源竞争的关系? > 还是这两个方法是顺序执行的? > > 问题2: > 虽然有不同的key,但函数只有一个实例,其中的MapState应该也是一个实例,那么不同key下的 > Process过程是并发执行的还是顺序执行的,会竞争MapState资源吗? > -- Best, Benchao Li |
In reply to this post by Benchao Li-2
谢谢大佬解答。
想再问一下,在并发1的情况下,一个算子里的MapState应该只有一个实例, 那么数据流上的不同key(不是map里的hash key)是怎么保证只获取到对应的那部分map state数据呢? 按我的理解,按key分流后,每个子流应该是只有自己的state,但从算子实例考虑,好像只有1个state实例存在。 Benchao Li <[hidden email]> 于2020年8月20日周四 下午4:40写道: > Hi, > > 问题1&2 都不存在多线程的问题。Flink底层来保证这些方法都是在同一个线程串行执行的。 > > shizk233 <[hidden email]> 于2020年8月20日周四 下午2:22写道: > > > Hi all, > > > > 请教一下,KeyedCoProcessFunction比较特殊,有两个输入,对应两个ProcessElement方法。 > > 问题1: > > 如果在这两个Process方法中都对同一个MapState进行修改,是否会存在资源竞争的关系? > > 还是这两个方法是顺序执行的? > > > > 问题2: > > 虽然有不同的key,但函数只有一个实例,其中的MapState应该也是一个实例,那么不同key下的 > > Process过程是并发执行的还是顺序执行的,会竞争MapState资源吗? > > > > > -- > > Best, > Benchao Li > |
In reply to this post by Cayden chen
谢谢Cayden 我去看看
Cayden chen <[hidden email]> 于2020年8月20日周四 下午4:58写道: > hi, 你可以看下这个,讲的挺详细的 > https://blog.csdn.net/yuchuanchen/article/details/105677408 > > > ------------------ 原始邮件 ------------------ > 发件人: > "user-zh" > < > [hidden email]>; > 发送时间: 2020年8月20日(星期四) 下午4:39 > 收件人: "user-zh"<[hidden email]>; > > 主题: Re: KeyedCoProcessFunction中的状态数据是否存在资源竞争的可能 > > > > Hi, > > 问题1&2 都不存在多线程的问题。Flink底层来保证这些方法都是在同一个线程串行执行的。 > > shizk233 <[hidden email]> 于2020年8月20日周四 下午2:22写道: > > > Hi all, > > > > 请教一下,KeyedCoProcessFunction比较特殊,有两个输入,对应两个ProcessElement方法。 > > 问题1: > > 如果在这两个Process方法中都对同一个MapState进行修改,是否会存在资源竞争的关系? > > 还是这两个方法是顺序执行的? > > > > 问题2: > > 虽然有不同的key,但函数只有一个实例,其中的MapState应该也是一个实例,那么不同key下的 > > Process过程是并发执行的还是顺序执行的,会竞争MapState资源吗? > > > > > -- > > Best, > Benchao Li |
In reply to this post by shizk233
不同的key应该用的是同一个state的实例,但是state下面会处理不同的key对应的state,也就是key对于用户来说是透明的。
比如你用一个MapState,那就是约等于每个key都有一个Map实例,不同key之间是独立的。 shizk233 <[hidden email]> 于2020年8月20日周四 下午5:03写道: > 谢谢大佬解答。 > 想再问一下,在并发1的情况下,一个算子里的MapState应该只有一个实例, > 那么数据流上的不同key(不是map里的hash key)是怎么保证只获取到对应的那部分map state数据呢? > > 按我的理解,按key分流后,每个子流应该是只有自己的state,但从算子实例考虑,好像只有1个state实例存在。 > > Benchao Li <[hidden email]> 于2020年8月20日周四 下午4:40写道: > > > Hi, > > > > 问题1&2 都不存在多线程的问题。Flink底层来保证这些方法都是在同一个线程串行执行的。 > > > > shizk233 <[hidden email]> 于2020年8月20日周四 下午2:22写道: > > > > > Hi all, > > > > > > 请教一下,KeyedCoProcessFunction比较特殊,有两个输入,对应两个ProcessElement方法。 > > > 问题1: > > > 如果在这两个Process方法中都对同一个MapState进行修改,是否会存在资源竞争的关系? > > > 还是这两个方法是顺序执行的? > > > > > > 问题2: > > > 虽然有不同的key,但函数只有一个实例,其中的MapState应该也是一个实例,那么不同key下的 > > > Process过程是并发执行的还是顺序执行的,会竞争MapState资源吗? > > > > > > > > > -- > > > > Best, > > Benchao Li > > > -- Best, Benchao Li |
理解了!感谢🙏!
Benchao Li <[hidden email]> 于2020年8月20日周四 下午6:00写道: > 不同的key应该用的是同一个state的实例,但是state下面会处理不同的key对应的state,也就是key对于用户来说是透明的。 > 比如你用一个MapState,那就是约等于每个key都有一个Map实例,不同key之间是独立的。 > > shizk233 <[hidden email]> 于2020年8月20日周四 下午5:03写道: > > > 谢谢大佬解答。 > > 想再问一下,在并发1的情况下,一个算子里的MapState应该只有一个实例, > > 那么数据流上的不同key(不是map里的hash key)是怎么保证只获取到对应的那部分map state数据呢? > > > > 按我的理解,按key分流后,每个子流应该是只有自己的state,但从算子实例考虑,好像只有1个state实例存在。 > > > > Benchao Li <[hidden email]> 于2020年8月20日周四 下午4:40写道: > > > > > Hi, > > > > > > 问题1&2 都不存在多线程的问题。Flink底层来保证这些方法都是在同一个线程串行执行的。 > > > > > > shizk233 <[hidden email]> 于2020年8月20日周四 下午2:22写道: > > > > > > > Hi all, > > > > > > > > 请教一下,KeyedCoProcessFunction比较特殊,有两个输入,对应两个ProcessElement方法。 > > > > 问题1: > > > > 如果在这两个Process方法中都对同一个MapState进行修改,是否会存在资源竞争的关系? > > > > 还是这两个方法是顺序执行的? > > > > > > > > 问题2: > > > > 虽然有不同的key,但函数只有一个实例,其中的MapState应该也是一个实例,那么不同key下的 > > > > Process过程是并发执行的还是顺序执行的,会竞争MapState资源吗? > > > > > > > > > > > > > -- > > > > > > Best, > > > Benchao Li > > > > > > > > -- > > Best, > Benchao Li > |
Free forum by Nabble | Edit this page |