大家好,我们的面经分享又来了。
这个是其中一个同学面试过程中记录下来的面经,其中被问到的几个核心的问题,我们逐个来分析一下。
因为面经全过程涉及到很多个人隐私,我们只挑其中的几个核心问题。
同时打个广告,如果你同样有面试陪跑需求或者需要专业有深度的大数据项目,可以直接联系我,备注好来意。
问题一,线上最大的一个Flink任务分配了多少资源?有多少个task?
这个问题是一个很接地气的问题,出现在这位同学的项目一面试中。这个问题也会决定接下来其他问题的走向,所以我们需要设定一个「讨论问题的环境」。
那么这个任务的资源消耗就不能太小。为什么呢?
因为资源分配较少的任务,无论DAG多么复杂,大概率是不会遇到较难的问题,后续的问题就无从谈起了。那么在真实的中大公司线上环境中这个回答多少比较合适呢?
在大多数复杂的业务场景中,如果涉及到复杂的排序、关联等,我们可以从100-200Core,T级别的内存消耗,开始认为一个任务的资源消耗到了一个较大的程度,在这样的场景中我们开始会遇到复杂的反压、网络资源分配、关联/聚合热点等问题。
在特定的业务超大流量的环境中,单个任务消耗的资源会达到数千core之大,在极端的业务场景中,一个3000-5000core的集群可能只运行个位数的任务。
那么一个这样的任务的task数量是多少呢?我们知道决定一个任务的task数量的核心参数是TM的个数、单个TM的slot数量。
那么,单个算子的Task个数等于该算子的并行度,整个作业的Task总数等于各算子并行度之和。
此外还会受限于算子本身的一些特性以及Flink任务存在的一些默认优化,例如某个算子单独设置了并行度,Flink任务本身会进行算子链优化,那么总的task个数可能会比理论值更小。
问题二,任务出现过什么问题?解决问题的过程和思路。
这个问题就是第一个问题的延伸,所以你可以看到,如果第一个问题你的场景是一个很小很简单的场景,那么这个问题基本也是答不好的。
那么一个线上任务最可能出现的问题无非下面几类:
- 数据问题
例如数据未正确处理排序导致乱序、数据热点、数据丢失等;
- 性能问题
反压、延迟、吞吐
- 稳定性问题
JobManage/TaskManager的OOM、checkpoint失败、网络资源不足等
- 资源问题
资源配置不当、参数错误等
- 运维和监控问题
监控缺失、日志缺失等
从上面的某一个点深入进去谈谈就好了。
问题三,你们对线上集群和任务做了哪些监控?
同样也是开放性问题。
一般来说集群监控会涉及到集群的容量,整体的内存、cpu使用率,磁盘容量等基本监控,此外,单个节点的健康状态也是重要的监控项。
另外在集群层面一般我们会有详细的运行任务列表,每个任务的资源消耗,方面在集群层面进行任务的治理。
对单个任务,基本的metrics例如lag、资源、消费情况,JVM的健康状况(GC、线程等),checkpoint的耗时、失败、大小等,此外还需要对单个Operator进行监控例如输入输出数据量、lookup的请求命中和延迟等,资源层面cpu和内存的使用率等;可能不同的场景还会有一颗自定义的监控指标,按照真实的情况回答即可。
问题四,数据质量做了哪些监控?
略过,聊过太多次了。最好代入真实场景回答。
所以这一轮下来,基本上一个项目的核心问题就问完了。中间当然还会涉及到项目中具体的方案设计,这些问题会根据简历上你写的详细展开,我们就不讨论了。