【发布时间】:2021-09-13 22:38:11
【问题描述】:
我正在 kubernetes 中运行一项 Flink 作业。我的设置如下
- 1 个作业管理器窗格
- 4 个任务管理器 Pod
- 3500 GB SSD 硬盘通过 NFS 持久卷声明在作业管理器和任务管理器 pod 之间共享,用于检查点、保存点和 RocksDB 状态后端
- 使用 state.backend.rocksdb.localdir 将 Rocksdb 数据刷新到附加的卷声明目录
- 启用增量检查点
我的 flink 作业从 kafka 源获取时间序列数据(时间、值),进行聚合和一些其他转换并将其发布到 kafka sink。
有时我的工作因检查点异常(10 分钟后超时)而失败,主要是由一名操作员完成。我不明白异步持续时间(在图像中)的含义以及为什么它花费的时间最长。在此异常之前,来自 kafka 的 5-8 百万条记录的吞吐量非常高,但在此检查点异常之后,它变得非常非常慢。另一个观察结果是增加并行性无助于增加吞吐量。我也启用了未对齐的检查点,但它没有多大帮助。
Flink 版本:1.13.2 提交:5f007ff @ 2021-07-23T04:35:55+02:00
感谢任何帮助。
编辑:
在大卫发表评论后,我在集群中进行了以下更改
我添加了一个单独的节点池,其中包含 10 个节点和 1 个本地 ssd(默认大小为 375 GB)连接到每个节点,并在此节点池中调度我的 TM pod。另外,我将rocksdb localdir 设置为将状态数据溢出到磁盘。我有 1 个 kafka 源,可以流式传输 10 亿个时间序列数据。结果如下:
检查点间隔 = 15 分钟,同时启用未对齐检查点
- 第一次运行,吞吐量真的很高。它在前约 40 分钟内处理了超过 3 亿个数据点。然后第三个检查点因超时而失败。超时后吞吐量下降
- 取消了第一份工作并重新提交了工作增益。吞吐量仍然很低,从约 1 亿/分钟降至约 100 万/分钟。
- 已删除 flink 集群,重新创建并重新提交作业。自过去 18 小时以来运行良好,没有检查点故障,但吞吐量非常低。它只处理了 6.25 亿。
问题
- 为什么第一次运行时吞吐量真的很高,然后又下降了?
- 第一次运行时仍然观察到检查点故障?
- 取消第一次运行的作业并重新提交它并没有帮助获得相同的吞吐量?
- 虽然作业现在运行良好,没有检查点故障,但为什么所有本地 ssd 设置的吞吐量仍然很低?
- 为什么检查点大小波动如此之大?有时多,有时少?
【问题讨论】: