你好, 这边猜测, 应该flink在checkpoint到hdfs的过程中, hadoop hdfs client 存在续约线程泄露的问题. 根据checkpoint周期和任务checkpoint大小,比较容易的复现在写入clickhouse/iceberg的flink任务的taskmanager中, 并且泄露的线程以每天10~30的速度增长. 通过arthas发现LeaseRenewer线程不能被正确销毁和不断地创建, 基本判定是 LeaseRenewer的锁和检查机制失败导致线程泄露, 这个问题不止影响hadoop 3.1.0版本, 经过测试hadoop 历史版本(比如 2.8.5也受到了影响)https://issues.apache.org/jira/browse/HDFS-14575, 大家可以把jira中提交的commit变动的两个类DFSClient.java LeaseRenewer.java cherry pick到生产使用的分支进行对比测试, 这个jira commit中也包含了完整的线程泄露过程的单元测试供测试
zilong xiao <acidzz...@gmail.com> 于2021年5月13日周四 17:09写道: > 并没有定位到具体原因,只能靠重启作业缓解。。。 > > zhisheng <zhisheng2...@gmail.com> 于2021年5月13日周四 下午4:20写道: > > > 你好,这个问题后来定位到问题了吗? > > > > 我们生产也有一个作业有这样的问题,Flink 版本是 1.10.0,这个作业是 JM 的线程数很多(快 6k),作业是 flink 读取 > > Kafka,会关联 HBase ,开启了 Checkpoint,就这个作业有问题,很奇怪 > > > > https://tva1.sinaimg.cn/large/008i3skNgy1gqgvhdu674j31je0u0795.jpg > > > > zilong xiao <acidzz...@gmail.com> 于2020年12月8日周二 下午6:21写道: > > > > > 作业数据流是 kafka -> flink -> > > > http/prometheus,目前这类型的作业很多,但是就只有那几个有问题,而且是必现,每次都只能重启,然后看着线程数上涨。。 > > 我再debug看看~ > > > > > > Paul Lam <paullin3...@gmail.com> 于2020年12月8日周二 下午6:00写道: > > > > > > > Hi, > > > > > > > > 我之前说的多个集群的情况主要指写入数据到 HDFS。如果只有 checkpoint 依赖 HDFS 而出现这种情况的话,的确是非常奇怪。 > > > > > > > > Best, > > > > Paul Lam > > > > > > > > > 2020年12月8日 11:03,zilong xiao <acidzz...@gmail.com> 写道: > > > > > > > > > > Hi Paul, > > > > > 线程名称是一模一样的,都是user1@cluserA,HDFS client版本对于用户来说是透明的,作业使用的是Flink > > > > > > > > > > > > > > > 1.11版本,该Flink版本使用HDFS版本好像是2.8.1,在Flink中和集群有持续交互的就只能想到checkpoint,开了DEBUG日志也没能找到root > > > > > cause。。 > > > > > > > > > > 另外 您说的“线程个数应该和用到的 HDFS 集群数目相同”不是很理解,作业只能提交到一个具体的集群吧? > > > > > > > > > > Paul Lam <paullin3...@gmail.com> 于2020年12月8日周二 上午10:45写道: > > > > > > > > > >> 我记得 LeaseRenewer 是 JVM 级别的,线程个数应该和用到的 HDFS 集群数目相同。 > > > > >> > > > > >> 你看看它们具体的线程名是不是完全相同(比如都是 user1@cluserA)?还有 HDFS client 的版本是什么? > > > > >> > > > > >> Best, > > > > >> Paul Lam > > > > >> > > > > >>> 2020年12月7日 18:11,zilong xiao <acidzz...@gmail.com> 写道: > > > > >>> > > > > >>> 在生产中发现有个别Flink SQL 1.11作业的container线程数很高,查看Thread > > > > Dump发现有很多名为LeaseRenewer > > > > >>> 的线程处于TIMED_WAITING状态,目前只能复现其现象,但是无法定位原因,不知道社区是否有类似经历的小伙伴呢? > > > > >>> > > > > >>> Flink version: 1.11 > > > > >>> State backend:filesystem > > > > >>> checkpoint interval: 60s > > > > >> > > > > >> > > > > > > > > > > > > > >