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

Flink中的运算符是什么?运算符状态和键控状态有何不同?

越麒
2023-03-14

根据我的理解,Flink中的运算符有源运算符、转换运算符等。我对Flink中运算符的理解正确吗?

在运算符状态下,Flink是维护每个运算符的状态(如针对每个作业/任务的map(),reduce()等),还是维护一个完成的作业/任务的状态?还有,如果我的作业是以多个并行提交的,那么每个槽会有自己的状态吗?

共有1个答案

阎裕
2023-03-14

无论是运算符状态还是键控状态,Flink状态始终是本地的:每个运算符实例都有自己的状态。JVM或作业之间没有共享或可见性。

至于这两种状态有何不同:操作符状态总是在堆上,而不是在rocksdb中。运算符状态具有有限的类型选项--ListState和BroadcastState--并且它不能是ValueState或MapState,这是键控状态最常用的形式。这源于其分布和重新缩放的不同方式。

StreamSource是运算符的一个例子,ProcessOperator是另一个例子(ProcessOperator环绕用户提供的ProcessFunction)。转换不是运算符,它们的作用是将运算符应用于流。例如,OneInputTransformation将OneInputStreamOperator应用于输入。

如果您想了解Flink的内部结构,阅读Hueske和Kalavri的Apache Flink流处理是最好的,也是唯一的方法。

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

  • 为什么无状态仿函数的不允许是?无状态lambda对象可转换为指向与其具有相同签名的自由函数的指针。 StephanT.Lavavej在第6页指出,到函数指针的转换只是一个操作符FunctionPointer()。但对于非成员函数,我无法获得指向操作符()的相应指针。对于functor来说,似乎无法转换 代码: 错误是 重载的“运算符()”不能是静态成员函数 但是操作符()没有重载。

  • 本文向大家介绍JavaScript中的运算符是什么?,包括了JavaScript中的运算符是什么?的使用技巧和注意事项,需要的朋友参考一下 让我们采用一个简单的表达式“ 4 + 5等于9”。这里4和5称为操作数,“ +”称为运算符。 JavaScript支持以下类型的运算符。 算术运算符 比较运算符 逻辑(或关系)运算符 赋值运算符 条件(或三元)运算符 例 这是一个说明运算符示例的示例-

  • 我正在使用在Flink中执行流计算。我为我的作业定义了一个扩展的类。假设我有一个通过键控的流a,和一个流B,它被广播给所有执行程序,以使用我定义的类处理a中的元素。我知道我可以在这个类的或中注册一个计时器,这样当它超时时,我可以通过调用来删除特定密钥组的关联状态。之后我在想,这个重点群体还存在吗? 例如,在流A中,一个新消息带有,我们生成了这样的密钥组及其关联状态。之后,如果出现另一个带有的消息,

  • 我有一个带有一些键的流,我想为每个键存储一些状态。我的流看起来如下所示: 在KeyedProcessFunction中,我有一个状态变量: 我对此还这么陌生,我做错了什么?

  • 本文向大家介绍什么是MySQL NULL安全相等运算符,它与比较运算符有何不同?,包括了什么是MySQL NULL安全相等运算符,它与比较运算符有何不同?的使用技巧和注意事项,需要的朋友参考一下 与标准SQL IS NOT DISTINCT FROM运算符等效的MySQL NULL安全相等运算符执行等于运算符的相等比较。其符号为<=>。当我们两个操作数都为NULL时,它的性能与比较运算符不同。请看