1、张蛟/小米高级软件工程师Apache FlinkApache Flink在小米的在小米的稳定性优化和实践稳定性优化和实践Stability optimization and practice of Apache Flink at Xiaomi发展现状发展现状和规模和规模稳定性优化稳定性优化及实践及实践运维优化运维优化及实践及实践未来规划未来规划与展望与展望#1#2#3#4#1#1发展现状及规模发展现状及规模整体架构业务层广告推荐搜索OneDataXDATA 数据查询与存储Presto/TrinoDorisKuduIcebergElastic SearchKylinHive 计算层Flink J
2、arFlink SQLSparkSparkStreamingYARN消息队列消息队列(Talos/RocketMQ)数据工厂数据采集Web埋点业务日志ServiceLogMySQLTiDBHBaseLCS AgentBinlog/Source发展现状和规模主力版本1.121.14版本已上线30003000+运行作业运行作业峰值处理2亿条每秒日均日均10w10w亿亿+消息消息国内外10+集群4 45 5000000+CPU CoreCPU Core日处理PB级消息量200TB200TB+MemoryMemoryUsedUsed面临的问题与挑战作业内存不可控,易出现YARN OOM Kill导致C
3、ontainer LostOn YARN模式无法自动平滑重启,只能触发failover实时作业对负载敏感,启动和运行时需要保证机器性能Checkpoint使用中遇到的稳定性问题HistoryServer占用磁盘空间大,访问慢,只能手动清理作业异常时难以确定异常原因及节点,排查困难#2 2稳定性优化及实践稳定性优化及实践Container Lost优化Flink JobManagerYARN ResourceManager申请资源返回资源YARN NodeManagerYARN ContainerFlink TaskManagerYARN ContainerFlink TaskManager分配
4、资源启动TaskManager心跳Container Lost问题Container Lost现象(一)Container Lost问题Container Lost现象(二)Container Lost问题YARN OOM KillContainer Lost原因存在的问题1.定时扫描对于进程内存突增情况的隔离性差,可能还没开始扫描就已经被系统kill2.节点资源的超卖导致节点的不稳定3.对于作业临时性内存需求的支持不是很好,即使节点有多余内存仍会触发killYARN NodeManagerContainersMonitor线程YARN ContainerFlink TaskManager启动
5、定期扫描Container Lost优化CgroupJDK升级切换JemallocCgroup内存软限制内存软限制OOM-Listener监听OOM-Event达到节点内存总大小是选取内存超过申请内存,启动时间最短,优先级最低的作业触发OOM KillGlibc分配问题可以解决一部分问题,仍然存在glibc分配问题Container Lost优化1.Cgroup对于rocksdb等造成的内存临时超用问题有效,但无法根本解决内存持续溢出或分配异常2.升级JDK解决Jemalloc导致的线程死锁bug3.切换Jemalloc解决Linux系统下64M anon分配问题Container Lost优
6、化4802.0.1000.2000.3000.4000.5000.月份Unit:1,000,000 US$202101202102202103202104202105202106减少作业OOM kill重启 90%以上数量节点平滑重启提前预防可能的隐患云环境下作业的稳定性避免框架内重启影响YARN模式恢复时间问题机器过保机器下线机房迁移恢复时间长作业平滑重启周期处理,避免Node Decommission消息频繁触发批量处理,避免Node Decommission消息造成瞬时负载压力节点去重,避免对同一作业重复触发YARN NodeManagerNode DecommissionFlink R