大数据架构师必懂的5大实时计算技术要点
|
凌晨三点二十,机房空调嗡嗡声突然低了半度——不是坏了,是压缩机喘不上气,跟我们当时一样。我盯着Flink任务面板上那排灰掉的Checkpoints,手还在摸咖啡杯沿,热的,第三杯了,杯底一圈深褐色印子。小张蹲在冷通道口拿热成像仪扫SSD温度,镜头糊了,他呵了口气擦,呵气比镜头还糊。 事情是从昨天下午四点十七开始的。不是任务挂了,是延迟毛刺先来的——0.8秒跳到12秒,又缩回去,像被谁掐着脖子按了一下再松手。我原以为又是Kafka分区水位不均,让小王去balance一下。他回消息说“leader选举正常”,手指敲键盘声音特别脆,隔壁工位老李听见了,抬眼说:“上次也是这么‘正常’,结果半夜三台broker全吐日志。” 五点零九分,第一个告警没响。不是监控崩了,是阈值设在“延迟超30秒才触发”。谁定的?去年Q3架构评审会,老板用激光笔点着PPT说:“别一惊一乍,给系统一点呼吸空间。”呼吸空间给了,系统真就睡过去了。我手动curl了三次metrics端点,第三次返回里多出一行:`rocksdb.sst.file.count: 4721`——不是报错,是数字自己膨胀得发慌。 十点十二分,备份脚本卡在`rsync --delete`阶段。不是磁盘满(主节点还有12%),是inotify_wait在监听/srv/flink/state目录时,碰上了RocksDB后台Compact线程正在搬SST文件。两个进程死锁式抢同一个inode元数据锁。运维小刘试了`kill -USR1`强制dump线程栈,log里只刷出一行:`compaction_pending: true`。真· pending,pending到天亮。 窗外雨下大了,雨刮器节奏乱,左边快右边慢,像我们昨晚切流时的两套K8s集群——一边还在用Flink 1.14的State TTL Bug修复版,一边刚升1.16,但checkpoint路径权限继承漏改。那个`/tmp/flink-checkpoints-legacy`目录,现在里面塞着三百多个`.crc`校验失败的meta文件,小张早上截图发群里,配字:“它们很乖,就是不肯被restore。” 最怕的不是宕机,是那种“功能全在,就是不对劲”的状态。消费者组offset在跳,但下游HBase里对应timestamp字段全是2023-10-15——我们上周刚重跑过历史补数,补数脚本里硬编码了这个日期,没人动它,它自己活过来了。我翻Git blame,作者栏写着“自动提交@CI-Job-1892”,再往上追,是凌晨一点半,一个叫“数据治理中台”的定时job悄悄改了env变量。我盯着那个job名看了四十来分钟,忽然想起上个月搬家,纸箱上写的“硬盘-勿压-含Flink状态快照”,物业小哥抬手就撕了胶带:“您这都贴仨月了,早该扔。” 所以大数据架构师必懂的5大实时计算技术要点,根本不是什么吞吐、语义、容错、序列化、Exactly-once——那是面试官问的。真正得嚼碎咽下去的,是:第一,RocksDB Compact线程和文件系统锁打架时,`ulimit -n`到底要开多大才算“够”;第二,Kafka Consumer心跳超时(heartbeat.interval.ms)和Session超时(session.timeout.ms)差800毫秒时,rebalance会不会在commit offset前抽风;第三,Flink checkpoint barrier和Watermark在反压链路上撞车,谁该让道;第四,Prometheus exporter暴露的`numOpenFiles`指标,在NFSv4.1客户端上为什么永远比`lsof | wc -l`少17个;第五,也是最绝的——当所有服务都健康、所有指标都绿、所有日志都安静,而业务方说“数据晚了11分钟”,你第一句该问的不是“哪条链路”,而是“你测的哪台机器的本地时间”。 昨儿值班室泡面汤洒了,泼在键盘F5键上,我连按七次才触发一次刷新。同事老陈说他女儿昨儿数学考试,最后一题写的是“假设地球是平的,请计算光速”。我没笑。我想到我们上周上线的新实时画像,也假设了“用户ID永不重复”,结果凌晨两点,风控那边打来电话,语音带着电流杂音:“你们上游……是不是把测试环境UUID生成器混进生产了?”我手边咖啡凉透了,杯沿上那圈印子,像极了Flink Web UI里checkpoint失败时弹出的那个红圈框——圆得毫无商量余地。 其实没那么玄。就是磁盘IO调度器在cfq模式下对随机读写太温柔,温柔到RocksDB以为自己还是单机嵌入式场景;就是Kafka Java Client 3.3.2里那个`isReady()`方法,判定broker存活居然不校验SASL handshake响应头;就是Flink TaskManager配置里写了`taskmanager.network.memory.fraction: 0.1`,却忘了YARN容器内存是动态的,而我们的flink-conf.yaml里这条,上回修改记录是2022年7月11号,作者:我自己。 我到现在也没想明白,为啥checkpoints全灰了,web界面右上角的cluster status还是“RUNNING”。但我知道,明早九点前,必须把`rocksdb.state.backend.delay.seconds`从15秒调成8秒——不是因为算出来8秒最优,是因为昨晚八点四十三分,我们把checkpoint interval砍到10秒时,延迟毛刺的峰值从12秒压到了8.3秒。差那0.3秒,就是监控屏右下角贴着的胶布,斜着,没剪齐,但挡住了告警弹窗的右下角小叉号。
文章配图,仅供参考 明天先把告警阈值调了。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


边缘计算驱动:运营中心大数据架构毫秒级响应揭秘
