背景:
最近用flink做实时异常检测,实时消费kafka数据,提交作业后消费一部分数据后就不在消费了,好像卡住了,kafka消息队列中一直在积压,作业也不会挂掉。之前一直没问题,最近将代码进行了重构出现了问题。一直以为是代码问题,不料最终发现是 CPU 核心数太少了。
分析:
1、单一物理机CPU为32个,一个3节点的flink集群
2、FLink配置将 taskmanager.numberOfTaskSlots 设置为 2
3、 代码中使用了分流器 sideoutput ,共一层分流,分了48个流,并行度为2,加上其他的 共需要 51 cpu
之前 taskmanager.numberOfTaskSlots为1,这样完成这个作业需要两个节点,当将 taskmanager.numberOfTaskSlots 设置为 2时,这个作业将会只在一个节点上运行,直接造成 一个节点上的CPU个数无法满足作业需要的资源。
解决方案:
将taskmanager.numberOfTaskSlots设置为1,重启flink集群,这样这个作业需要集群中两个节点运行,两个点的CPU数 64 > 51, 作业正常运行。