apache-flink - Apache Flink:注册名称冲突。名称为 *** 的 KvState 已被其他运营商注册
问题描述
我在运行 flink 作业时遇到了这个问题。
Registration name clash. KvState with name 'XXXX' has already been registered by another operator (fab4c54085fa3ee85a6e1bb1062c20af).
例外:
org.apache.flink.runtime.execution.SuppressRestartsException: Unrecoverable failure. This suppresses job restarts. Please check the stack trace for the root cause.
at org.apache.flink.runtime.query.KvStateLocationRegistry.notifyKvStateRegistered(KvStateLocationRegistry.java:120)
at org.apache.flink.runtime.jobmanager.JobManager.org$apache$flink$runtime$jobmanager$JobManager$$handleKvStateMessage(JobManager.scala:1517)
at org.apache.flink.runtime.jobmanager.JobManager$$anonfun$handleMessage$1.applyOrElse(JobManager.scala:740)
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36)
at org.apache.flink.runtime.LeaderSessionMessageFilter$$anonfun$receive$1.applyOrElse(LeaderSessionMessageFilter.scala:49)
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36)
at org.apache.flink.runtime.LogMessages$$anon$1.apply(LogMessages.scala:33)
at org.apache.flink.runtime.LogMessages$$anon$1.apply(LogMessages.scala:28)
at scala.PartialFunction$class.applyOrElse(PartialFunction.scala:123)
at org.apache.flink.runtime.LogMessages$$anon$1.applyOrElse(LogMessages.scala:28)
at akka.actor.Actor$class.aroundReceive(Actor.scala:502)
at org.apache.flink.runtime.jobmanager.JobManager.aroundReceive(JobManager.scala:122)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)
at akka.actor.ActorCell.invoke(ActorCell.scala:495)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)
at akka.dispatch.Mailbox.run(Mailbox.scala:224)
at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.IllegalStateException: Registration name clash. KvState with name 'XXXX' has already been registered by another operator (fab4c54085fa3ee85a6e1bb1062c20af).
at org.apache.flink.runtime.query.KvStateLocationRegistry.notifyKvStateRegistered(KvStateLocationRegistry.java:116)
... 20 more
当我从 IntelliJ IDE 运行作业时,它运行良好,但是当我使用以下命令运行作业时,我遇到了这个问题。
bin/flink 运行 -c com.xxx.XXXJob
这个错误的原因应该是什么?我已重新启动 flink 并重新运行作业,但我仍然收到此错误。
解决方案
我在两个进程函数中配置了同名的可查询状态。
@Override
public void open(Configuration parameters) {
ValueStateDescriptor<? super Output> descriptor = new ValueStateDescriptor(queryableStateName, Xyz.class);
descriptor.setQueryable("downloads");
state = getRuntimeContext().getState(descriptor);
}
在上面的代码descriptor.setQueryable("downloads");
中,我给出downloads
了多个进程函数。
关于我对为什么它是从命令IDE
而不是通过bin/flink run
命令运行感到惊讶。
所以原因是'flink-queryable-state-runtime_2.11-1.4.2.jar'
当我从 IDE 运行时,IDE 无法从类路径中找到这个 jar。因此可查询功能被禁用,并且由于该工作永远不会抱怨。所以作业成功运行。
但是当我使用bin/flink run
它时,它是从 flink 的库中找到的。
因此,由于名称相同并且作业失败,它会给出错误。
推荐阅读
- c - 如何将 X 宏与函数指针数组相关联
- android - 与 Android (kotlin) 和 AndroidTest 表现不同的相同代码
- command - TYPO3 v10.5 在后端查找站点的所有页面
- typescript - 如何在 TypeScript 中为输入组件编写 onChange
- google-chrome - Chrome 中的 http tileLayer wms over https 站点强制强制为 https
- asp.net-mvc - 尝试使用 Advantage OLE DB 提供程序访问 DBF 文件会在打开连接时引发异常
- c++ - 从 android NDK 返回一个 char 数组
- arm - 如何在 GEM5 中使用 ARM PMU?
- java - 如何将包含 json 值的对象写入 java 中的 csv 文件?
- airflow - 在气流上执行任务期间是否可以检索最后成功的任务执行日期?