hi
Flink 暂时没有全局 State 的概念,所有的 state 均指单并发下的 state。不过你可以用 broadcast state[1]
来模拟全局 state
[1]
https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/dev/stream/state/broadcast_state.html
Best,
Congxian


a773807...@gmail.com <a773807...@gmail.com> 于2020年5月27日周三 下午3:47写道:

> 不会,在第二次keyby的时候,根据id-name 做key, 然后做reduce,
> 把重复的数据中的value,根据time去做判断,取time最小值的value,就可以去重了
>
>
>
> a773807...@gmail.com
>
> 发件人: star
> 发送时间: 2020-05-27 15:45
> 收件人: user-zh
> 主题: 回复:回复:全局state
> 感谢您的建议,但是这样数据会重复,翻倍。目前看好像只能依赖外部存储了
>
>
>
> 发自我的iPhone
>
>
> ------------------ 原始邮件 ------------------
> 发件人: a773807...@gmail.com <a773807...@gmail.com&gt;
> 发送时间: 2020年5月27日 11:32
> 收件人: user-zh <user-zh@flink.apache.org&gt;
> 主题: 回复:回复:全局state
>
>
>
> Hi
> &nbsp;&nbsp;&nbsp; 我想到一个方案,你可以参考一下
> 源数据:
> &nbsp;&nbsp;&nbsp; id:1,name:A,value:A1, time:&nbsp; t1
> &nbsp;&nbsp;&nbsp; id:2,name:A,value:A2,&nbsp; time: t2
> &nbsp;&nbsp;&nbsp; id:1,name:B,value:A3, time: t3
> 经过flatMap后:
> &nbsp;&nbsp;&nbsp; id-name: 1-A, key: 1, value: A1, time: t1
> &nbsp;&nbsp;&nbsp; id-name: 1-A, key: A, value: A1, time:t1
> &nbsp;&nbsp;&nbsp; id-name: 2-B, key: 2, value: A2, time: t2
> &nbsp;&nbsp;&nbsp; id-name: 2-B, key: B, value: A2, time: t2
> &nbsp;&nbsp;&nbsp; id-name: 1-B, key: 1, value: A3, time:t3
> &nbsp;&nbsp;&nbsp; id-name: 1-B, key: B, value: A3, time:t3
> 然后根据key做keyBy,里面keyBy里面的state,根据时间获取对应的value
> 然后再做一次keyby,不过是根据id-name 去合并回来,就可以实现你的问题了
>
>
>
> a773807...@gmail.com
> &nbsp;
> 发件人: star
> 发送时间: 2020-05-27 00:05
> 收件人: user-zh
> 主题: 回复:全局state
> 感谢您的回复,通过keyby细节实现有点难.
> id:1,name:A,value:A1
> id:2,name:A,value:A2
> id:1,name:B,value:A3
> &nbsp;
> &nbsp;
> 以上三条记录,第一条最先到达,后面两条到达后发现id或者name和第一条的id或者name一致value就取第一条的值。
> 输出:
> id:1,name:A,value:A1
> id:2,name:A,value:A1
> id:1,name:B,value:A1
> &nbsp;
> &nbsp;
> 原来的想法是存一个map,map的key是id或者name,value是对应的value值;例如上面例子对应的mapstate对应的k,v:
> &nbsp;
> &nbsp;
> key:1,value:A1
> key:A,value:A1
> key:2,value:A1
> key:B,value:A1
> &nbsp;
> &nbsp;
> &nbsp;
> 发自我的iPhone
> &nbsp;
> &nbsp;
> ------------------ 原始邮件 ------------------
> 发件人: tison <wander4...@gmail.com&amp;gt;
> 发送时间: 2020年5月26日 19:01
> 收件人: user-zh <user-zh@flink.apache.org&amp;gt;
> 主题: 回复:全局state
> &nbsp;
> &nbsp;
> &nbsp;
> 任意并行度全局状态从物理上就是不可行的,你可以了解一下分布式计算系统怎么部署物理作业的。“全局状态”要么依赖外部存储要么依赖实现(部署)细节。
> &nbsp;
> 你这个需求能不能自定义 KeyBy 细节(KeySelector)来实现?相关文档见
>
> https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/api_concepts.html#define-keys-using-key-selector-functions
> &nbsp
> <https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/api_concepts.html#define-keys-using-key-selector-functions&nbsp>
> ;
> Best,
> tison.
> &nbsp;
> &nbsp;
> star <3149768...@qq.com&amp;gt; 于2020年5月26日周二 下午6:42写道:
> &nbsp;
> &amp;gt;
> 请问,有全局状态组件吗?我有一个需求需要对数据里的id和name做映射,也就是如果两条数据的id或者name相同则映射成一个值;现在只能使用operator
> &amp;gt; state,并且并行度设置为1,来实现全局state
> &amp;gt;
> &amp;gt;
> &amp;gt; 谢谢
> &amp;gt;
> &amp;gt; 发自我的iPhone
>

回复