Apache Beam最近通过statespec
和@stateid
注释引入了状态单元格,并在Apache Flink和Google Cloud Dataflow中提供了部分支持。
java prettyprint-override">input.apply(Window.<MyElement>into(CalendarWindows.days(1))
.triggering(AfterWatermark.pastEndOfWindow()
.withEarlyFirings(
AfterProcessingTime.pastFirstElementInPane()
.plusDelayOf(Duration.standardMinutes(10))
))
.discardingFiredPanes()
.apply(ParDo.of(new MyStatefulDofn()));
触发配置不会影响pardo
有状态处理的进行方式。这些元素立即提供给dofn
,而无需任何缓冲/触发,并且dofn
直接控制何时发生输出。
控制输出是有状态的pardo
处理和触发器控制的combine.perkey
之间的一个重要区别。这就是为什么当触发器不够丰富时,有状态Pardo
通常是一个好的选择。
我在Beam博客上的文章中更详细地比较了有状态Pardo
处理和Combine
+触发器:https://Beam.apache.org/blog/2017/02/13/statefult-processing.html
现在,如果在有状态的pardo
上游某处有groupbykey
或combine.perkey
,那么输入元素将与上游触发的某个触发器相关联。但这并不影响如何管理有状态pardo
的状态。由于状态是跨元素持久化的,而“窗格”只是一个元素,所以状态一直保持到窗口完全过期。
顺便说一句,很好的总结引出了你的问题!
问题内容: 请考虑以下代码: 这给出了输出 但是,我希望它能给 ..因为在调用触发方法时h.id已更改为“ B”。 似乎是在启动单独的进程时创建了主机实例的副本,因此原始主机中的更改不会影响该副本。 在我的项目中(当然,要更详细地说明),主机实例字段有时会更改,并且由在单独的进程中运行的代码触发的事件可以访问这些更改很重要。 问题答案: 多处理在不同的 流程中 运行东西。事物在发送时 不被 复制几
在阅读了Flink的文档并四处搜索后,我无法完全理解Flink的句柄在其窗口中的状态。假设我有一个每小时滚动的窗口,其中包含一个聚合函数,该函数将消息累积到某个java pojo或scala case类中。该窗口的大小将与一小时内进入该窗口的事件数量相关联,还是仅仅与POJO/Case类相关联,因为我将事件累加到该对象中。(例如,如果将10000个味精数成一个整数,大小会接近10000*味精大小还
null null 后端代码有一个枚举,它在代码中赋予这些预定义整数一个含义 web服务API将返回状态号 前端代码有一个类似的枚举,它在代码中赋予这些预定义整数一个含义。(如后端代码) null null 优点: 数据库定义良好并规范化 从API返回的数据是描述性的,并提供了所需的含义。 使用的状态常量已包含其含义,这减少了出错的机会。 对数据库中的列使用枚举类型有其局限性。以后使用ALTER命
所以,我试图弄清楚Beam DoFn中静态变量的行为,它在线程之间共享(在同一个JVM中)吗? 基本上是试图从编程指南中了解以下内容: 4.3.2.线程兼容性 …请注意,函数对象中的静态成员不会传递给工作实例,并且可以从不同的线程访问函数的多个实例。 https://beam.apache.org/documentation/programming-guide/#requirements-用于编写
我们正在构建一个具有两个流的应用程序: 大量信息流 我们希望连接这两个流以获得共享状态,以便第一个流可以使用第二个状态进行扩展。 每天左右,拼花文件(第二流的源代码)都会更新,这需要我们清除第二流的状态并重建它(可能需要大约2分钟)。 问题是,我们可以在该进程运行时阻止/延迟来自第一流的消息吗? 谢谢。
使用时有点卡住了。如果我把它放在before窗口上,它似乎可以正常工作,但如果放在窗口的“apply”函数之后,它就会失败。 我正在测试两个流,主功能在不断摄取数据和控制流模型在更改模型的要求。 我能够在中正确设置并查看b0/b1,但是始终可以看到b0和b1在初始化时设置为0。 我是不是漏了什么明显的东西?