apache-flink - 如何在 flink 流中动态序列化参数
问题描述
我有一个params
要在 flink 流中序列化的参数,
class P extend Serializable {...}
val params = new P(...)
val env = StreamExecutionEnvironment.getExecutionEnvironment
env.addSource(new MySource(params))
.map(new MyMap(params))
.addSink(new MySink(params))
env.setParallelism(1)
env.execute("My Job")
但是驱动程序节点中的参数会发生变化,我需要params
在作业运行期间更新到执行程序。是否有可能基于不停止 flink 流作业?
解决方案
简而言之,答案是否定的。因为每次有新记录出现时,您的 UDF 都需要 [反] 序列化参数,这会减慢执行速度。
但是,您可以通过扩展AbstractUdfStreamOperator并在转换操作中调用它来实现自己的流运算符。我在这里做了一个例子:“在 Flink 中实现我自己的流操作符来处理数据倾斜”。
然后您决定操作员何时读取新参数。例如,只需创建一个计划为每 10 分钟一次的新线程。参数文件必须放置在操作员将运行的所有节点上。
推荐阅读
- android - Firebase 存储下载文件到 Android 上的 URI
- elasticsearch - 使用无痛脚本无法获得结果
- javascript - 反复从javascript数组中获取随机项?
- php - Prestashop Webservice Api 登录
- html - 没有在浏览器中显示,它阻止 TinyMCE 工作。有什么东西可以阻止 doctype 工作吗?
- shiro - 如何在 Apache Shiro 中配置 SameSite Cookie 属性?
- java - 未执行 Maven 资源过滤
- css - 响应式样式不适用于不同尺寸屏幕上的悬停状态
- java - 如何将动态意图添加到由 Android 后端决定的任何 Activity?
- python - 有没有办法对一个序列中的熊猫数据框进行分组?