背景
现有集群版本是Flink 1.10.1,想要升级到社区最新的版本Flink 1.11.1.
踩坑过程
No hostname could be resolved for ip address
详细的社区邮件讨论过程如下:
http://apache-flink.147419.n8.nabble.com/Flink-1-11-submit-job-timed-out-td4982.html
在提交作业的时候,JM会疯狂刷出大量的日志No hostname could be resolved for ip address xxxx。该xxxx ip是kubernetes分配给flink TM的内网ip,JM由于这个报错,直接time out。
1 | kubectl run -i -t busybox --image=busybox --restart=Never |
进入到pod中反向解析flink TM的ip失败。
1 | / # nslookup 10.47.96.2 |
而解析JM居然可以成功
1 | / # nslookup 10.34.128.8 |
唯一的差别就是JM是有service。
通过添加社区提供的可选配置解决问题taskmanager-query-state-service.yaml。
https://ci.apache.org/projects/flink/flink-docs-release-1.11/ops/deployment/kubernetes.html
不过目前跟社区的沟通中,社区是没有遇到这个问题的,该问题还在进一步讨论中。
新版本waterMark改动
新版的waterMark的生成改为
1 |
|
使用方式改为:
1 | dataStream.assignTimestampsAndWatermarks(WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(3))); |
跟旧版本的相比extractTimestamp提取时间戳的操作不见了。
1 | public class BoundedOutOfOrdernessGenerator implements AssignerWithPeriodicWatermarks<MyEvent> { |
如果按照新版的升级,那么数据的timeStamp会变成Long.Min。正确的使用方式是
1 | dataStream.assignTimestampsAndWatermarks( |
1 | .assignTimestampsAndWatermarks(WatermarkStrategy.<StationLog>forBoundedOutOfOrderness(Duration.ofSeconds(3)) |
如果有自定义,使用方式如下
1 | .assignTimestampsAndWatermarks(((WatermarkStrategy)(ctx)->new BoundOutOrdernessStrategy(60,60) |
工具类
1 | public class WatermarkStrategys{ |
flink1.11,idea运行失败
社区讨论见
http://apache-flink.147419.n8.nabble.com/flink1-11-idea-td4576.html
作业的依赖从1.10.1升级到1.11.0,在idea运行的时候报错
1 | Exception in thread "main" java.lang.IllegalStateException: No ExecutorFactory found to execute the application. |
解决方法:
尝试加一下这个依赖
groupId: org.apache.flink
artifactId: flink-clients_${scala.binary.version}
导致原因