
1. 从“事后追热点”到“分钟级响应”我们为什么重写舆情系统做舆情监测这行的人估计都有过这种体验凌晨三点某个话题突然在全网炸开你负责的系统却还在按小时级任务慢吞吞地跑批等报表出来热点已经变凉了部门群里全是“怎么没预警”的追问。这类痛点的根源其实不在算法而在架构。传统的舆情系统大多是“采集 定时清洗 入库 统计报表”的组合离线调度一跑就是半小时甚至更久。数据从抓取到呈现链路长、环节多、每层都有延迟分钟级预警自然无从谈起。而我们做 Infoseek 这套系统的出发点就是要把“发酵中”和“已爆发”区分开在话题还处于上升期的时候就把信号送出去而不是等它上了热搜才后知后觉。Infoseek 这个名字字面意思很直白——seek information但内部含义是“信息快速查找与信号提取”。它不只是一套爬虫加搜索引擎而是一个完整的实时舆情分析平台。核心目标只有一个从海量互联网公开信息中把特定实体、特定事件、特定情绪变化以分钟级的速度识别出来并推送给需要的人。这套系统适合谁参考如果你正在做舆情监测、社会化聆听、品牌风险预警或者任何需要“实时发现异常信号”的文本处理场景这篇拆解应该能给你一些可落地的思路而不是那种满篇“分布式、微服务”却不知道从哪下手的PPT架构。我尽量按实际工程的顺序来讲先聊设计取舍再拆核心环节然后给关键实现最后是我踩过的坑。2. 整体设计与取舍为什么“快”不只是靠换一个中间件2.1 业务需求倒逼架构延迟目标的三个等级在动手画架构图之前我们先把业务需求翻译成技术指标。舆情预警的延迟不能笼统地说“越快越好”否则你会陷入盲目优化。实际业务里我们把它拆成了三个等级L1秒级触发——某个重点监控账号发布了一条高危内容必须立刻告警。这个场景只涉及单点数据延迟要求最高。L2分钟级发现——某个话题在微博、小红书、知乎等多个平台开始出现传播苗头比如一小时内新增讨论量超过阈值需要在 5 分钟内识别到。这是 Infoseek 主打的核心场景。L3小时级研判——生成日报、周报进行趋势分析和舆情总结这个场景不需要实时但对数据完整性要求高。如果你把三个等级的需求并列来看就会发现它们对架构的要求完全不同。L1 靠监听L2 靠流式计算加窗口聚合L3 靠离线数仓。与其设计一个“万能”的系统把所有场景全包了不如分而治之。Infoseek 的架构主线是围绕 L2 展开的L1 作为辅助通道L3 则完全复用已有的离线链路。这样设计的直接收益是我们不需要为了 L3 的复杂分析逻辑拖慢 L2 的链路也不需要为了 L1 的低延迟去牺牲批量处理的吞吐。每个等级都有自己最合适的工具系统复杂度没有失控。2.2 端到端延迟拆解五分钟到底花在哪了很多团队做实时系统有个误区一上来就把 Kafka 和 Flink 摆上觉得用了流式计算就“实时”了。但端到端的延迟不是单靠一个组件就能解决的。我们当时做了个延迟拆解目标五分钟算了一笔账数据采集端延迟目标控制在 30 秒以内。这不是指爬虫请求有多快而是从内容发布到进入消息队列的时间。消息队列缓冲与分发目标 10 秒以内。正常情况下毫秒级就能完成预留时间是为了应对突发流量造成的堆积。流式计算与实体识别目标 60 秒以内。包含分词、实体识别、关键词命中、情感分析几个环节。窗口聚合与阈值判断目标 120 秒以内。滑动窗口需要等待足够的数据积累才能做出判断这是硬性等待时间。预警加工与推送目标 30 秒以内。组装告警内容、去重、发送到钉钉或企微。把上面这些加起来大约是 250 秒刚好在五分钟的预算内。这个拆解过程非常关键——它告诉你分钟级预警不是一个“魔法开关”而是每一个环节都要抠出来的时间预算。哪个环节超了整个链路就超了。提示做架构设计先做延迟预算就像做产品先定核心指标一样。没有预算约束的架构设计最后一定变成一堆中间件的堆砌。2.3 为什么是 Kafka Flink而不是 Elasticsearch 硬扛我们在早期阶段其实踩过 Elasitcsearch 的坑。一开始数据量不大直接靠 ES 的倒排索引做关键词匹配响应速度看着还行。但随着数据量翻倍问题开始暴露ES 的查询延迟随着数据量和分片数量上升而明显劣化而且高频轮询查询对集群压力极大——你为了“实时”只能提高轮询频率而每次查询都在消耗 CPU 和 IO。后来我们调整了思路ES 只做存储和检索实时计算的部分交给 Kafka Flink。原因很简单Kafka 天然适合做削峰填谷的缓冲层应对突发流量不会把下游打垮。Flink 的窗口计算、状态管理、事件时间处理机制天然适合做“一段时间内新增讨论量”这种聚合分析。ES 的强项是“查”而不是“算”。你让一个数据库去承担流式计算的任务属实用错了工具。这算是架构上的第一次认知升级实时预警靠的是流式计算引擎而不是靠查得快。明白了这一点整个设计思路就清晰多了。3. 核心架构分层与关键模块详解3.1 整体架构总览一条数据从公开网页到预警消息的旅程Infoseek 的逻辑架构可以横向切成四层采集层、传输缓冲层、计算分析层、预警服务层。另外还有一个旁路的管理配置层负责规则管理、模型管理、告警阈值设置。数据旅程大致是这样的采集层从各个信源抓取内容经过清洗和规范化封装成统一的数据格式发送到 Kafka。Flink 从 Kafka 消费数据先做实时处理再把原始数据写一份到 ES 和数仓同时把聚合结果推送到预警服务层。预警服务层根据预置规则和模型判断结果决定是否触发告警、发给谁、用什么渠道发。这套架构的显著特点是链路是直的而数据和规则是分离的。采集层不知道规则是什么计算层不知道告警发给谁预警服务层不关心数据从哪来。各层间的耦合度被压到最低后续替换任何一层的实现都不会牵动全局。3.2 采集层信源分级与增量抓取策略采集层是整个系统的数据入口也是很容易被低估的一层。很多人觉得爬虫嘛能抓到就行但真实场景里信源之间的重要性和时效性差异非常大。Infoseek 把信源分成了三个等级S级信源重点媒体、头部KOL、监管机构账号、竞品官方账号。这些账号发布的内容对舆情走向影响极大必须秒级监听。实现上优先走官方开放接口或 RSS其次是高频率轮询间隔控制在 30 秒到 1 分钟。A级信源主流新闻网站、论坛高热度板块、部分垂直社区。这些信源内容量大但单条内容的爆发力不如 S 级。抓取间隔可以放到 1 到 5 分钟重点做增量抓取。B级信源长尾网站、普通帖子和评论流。这类信源海量但单条价值低用低频率的广度抓取兜底主要是为了后续的数据分析而不是实时预警。这个分级策略解决了一个非常现实的问题如果对全网所有信源都采用秒级轮询采集成本会高到无法承受而且大量低价值请求还会触发反爬机制。分级之后我们把珍贵的抓取预算用在了刀刃上。增量抓取方面我们实现了基于内容指纹的去重逻辑。每条内容抓取后计算一个哈希签名签名相同则跳过。这个哈希不只是内容文本还包括链接、发布时间、作者三个维度组合起来能有效避免转载内容被漏掉或重复入库。3.3 传输缓冲层Kafka 分区策略与流量控制Kafka 在这一层扮演的角色不只是消息队列更是整个系统的“蓄水池”。舆情数据有一个很典型的特征平时流量平稳但突发事件一来流量曲线直接拉满。如果采集层直接把数据打到计算层计算层大概率会被冲垮。我们根据业务维度设计了 Kafka 的 Topic 结构raw-content存放所有清洗后的原始内容是所有下游消费的基础。entity-event存放经过实体识别和事件提取的结构化数据供预警判断使用。alert-trigger存放触发预警条件的数据信号由预警服务层消费。分区的策略也很有讲究。raw-content按源平台 ID 取模分区保证同一个平台的数据顺序性entity-event按实体 ID 分区让同一个实体的所有事件都进入同一个分区这样 Flink 在消费时能保证同一个实体的聚合状态是准确的。流量控制方面我们在采集层做了一层本地缓冲。当 Kafka 生产端出现背压broker 处理不过来时不直接丢弃数据而是先落在本地磁盘等压力缓解后继续发送。这个设计在几次大流量冲击中救过命属于那种平时不起眼、关键时刻值千金的模块。3.4 计算分析层Flink 实时链路与多模型协同计算分析层是 Infoseek 的技术核心也是整个系统“智能”程度的关键。这一层我们跑了两大类任务第一类是实时清洗与结构化任务。从 Kafka 消费原始数据后Flink 作业会执行一系列处理操作第一步繁简体转换和编码归一化这一步看似基础但实际上很多爬虫抓回来的内容编码乱成一团不做归一化后续全白搭第二步分词与词性标注我们用的是自研词典加开源分词器结合的方案覆盖了舆情场景里大量的品牌词、产品词和人物名第三步实体识别与情感分析这里跑了一个轻量级的模型推理服务从文本中抽取出人物、组织、地点、产品并判断内容的情感极性。第二类是事件聚合与异常检测任务。单个文本的情感分析没有太大意义真正有价值的是“围绕某个实体在一段时间内情感和讨论量的变化趋势”。所以 Flink 里跑了一个滑动窗口聚合作业窗口大小 5 分钟滑动步长 1 分钟对每个实体计算新增讨论量、负面占比、传播速度等指标。这里要重点说一下为什么选 Flink 而不是 Spark Streaming。舆情预警场景里有很强的事件时间语义——数据的产生时间比到达时间更关键因为爬虫抓取本身就有延迟晚到几分钟是常态。Flink 对事件时间处理、乱序数据、延迟数据有成熟的支持机制watermark allowedLateness而 Spark Streaming 在这方面的处理相对笨重。另外Flink 的状态后端可以保存“实体当前状态”配合 Checkpoint 机制实现精确一次的语义这在舆情场景里意味着同一件事不会被重复预警两次。3.5 预警服务层规则 模型双引擎与多渠道分发预警服务层解决的问题是算出了异常信号怎样把它变成一条可行动的告警。我们需要一个延迟极低、可靠性极高的告警通道。系统同时部署了两套预警引擎互为补充第一套是规则引擎。规则引擎的设计原则是“能不用模型就不上模型”。对于明确可描述的预警场景比如某个竞品品牌名出现在高流量账号的标题里或者某个重点监控账号的负面发帖直接用规则匹配搞定。规则引擎的优势是响应快、结果可控、成本低而且出了问题可以直接回溯定位。我们用了自研的轻量级规则引擎规则用 JSON DSL 描述支持关键词、正则、布尔组合和时间窗口约束。第二套是模型引擎。模型引擎负责那些规则说不清楚、需要综合判断的场景。比如“这个话题的传播形态是否异常”不能简单说“超过100条就告警”因为不同时间段的正常讨论量差异很大。模型引擎基于历史数据训练了一个异常检测模型对实体的讨论量序列做预测当实际值显著偏离预测区间时触发预警。这个思路比固定阈值更科学能够根据时间周期和平台特性自适应调节。双引擎的判断结果会汇入一个统一的消息体包含实体名称、事件类型、证据链接、触发原因、危害等级五个核心字段。然后由分发模块根据预警级别和接收人配置通过企微机器人、钉钉群、短信、邮件四条渠道推出去。分发还有一个“渠道优先级”的概念最高级别的预警比如某个区域爆发负面事件会同时触发所有渠道普通预警只在企微群里发一下避免短信疲劳。3.6 管理配置层规则热加载与模型生命周期管理最后是容易被忽视、但实际上决定系统上限的管理配置层。规则和模型的管理如果做不到动态化每次调整都要发版重启那“分钟级预警”就成了一个笑话——因为你调整配置的时间都比预警时间还长。规则引擎的规则全部存放在数据库里通过管理后台可以随时增删改。规则变更后通过推送通知的方式让 Flink 作业和预警服务层的规则缓存实时刷新整个过程不需要重启任何服务。我们叫它“规则秒级生效”实际体验下来从后台保存到新规则生效延迟在一秒以内。模型的管理则要更重一些。每个模型有明确的版本号、训练数据集、训练时间、评估指标灰度发布时需要实时对比新旧版本的预测效果。在管理后台能看到每个模型的调用量、响应时间、误报率指标一旦指标恶化可以一键回滚到上一版本。这种机制保证了模型升级的风险可控。4. 分钟级预警核心链路实战从关键词命中到告警推送的完整实现4.1 预警规则的配置实践一个“品牌负面事件预警”的规则例子光讲架构太虚我拿一个实际运行的规则做例子演示一下从配置到告警的完整流程。假设我们监控一个消费品牌“XX乳业”预警目标是“全网范围内1小时新增负面讨论超过100条或者权威媒体发布负面报道”。这条规则在规则引擎里表达为{ ruleId: alert_brand_negative_001, ruleName: 品牌负面事件预警, metrics: [ entityId XX乳业, sourceType in [news, weibo, xiaohongshu], sentimentLabel negative, publishTime now() - 1h ], condition: count 100 OR sourceRank S, alertLevel: high, channels: [wecom, sms], throttleConfig: { type: sliding_window, windowSize: 60m, cooldownPeriod: 30m } }这条规则几个关键点的设计逻辑count 100 OR sourceRank S这个条件表达的是“量变”和“质变”两种触发方式。量变是数量堆积质变是权威信源直接点名两者都是强信号。throttleConfig限流配置特别重要。舆情预警最怕的就是同一件事在 5 分钟内推送了 10 次告警把接收人的企业微信直接轰炸到麻木。30 分钟的冷却期保证同一条规则在触发后短时间内不会重复推送除非情况进一步恶化。4.2 Flink 实时计算核心逻辑从数据消费到事件输出再来一段 Flink 处理流程的伪代码展示核心链路是怎么串起来的DataStreamString rawStream env.addSource(new FlinkKafkaConsumer( raw-content, new SimpleStringSchema(), kafkaProps )); DataStreamUnifiedEvent eventStream rawStream .map(new ContentCleanFunction()) // 清洗、编码归一化 .map(new EntityExtractFunction()) // 实体识别 .map(new SentimentAnalyzeFunction()) // 情感分析 .filter(new RuleMatchFilter()); // 规则初筛只保留命中的事件 DataStreamKeyedStream keyedStream eventStream .keyBy(event - event.getEntityId()); // 按实体ID分组 DataStreamEntityAggregate windowResult keyedStream .window(SlidingEventTimeWindows.of(Time.minutes(5), Time.minutes(1))) .aggregate(new EntityAggregateFunction()) .process(new ThresholdJudgeFunction()); // 阈值判断超过阈值输出告警 windowResult .map(new AlertMessageComposer()) .addSink(new AlertPushSink());这段代码的关键点在于ThresholdJudgeFunction。窗口每 1 分钟滑动一次意味着每个实体每分钟都会有一个聚合结果。ThresholdJudgeFunction拿到聚合结果后会结合预警服务层同步过来的规则配置做判断如果超过规则阈值就构造告警消息推下去。4.3 告警内容组装与多路分发让接收人一眼看懂发生了什么很关键的一环是告警内容的质量。系统实现了“模板 结构化信息”的组装方式一条高质量的告警长这样【高优预警】XX乳业负面舆情升温 - 实体XX乳业 - 事件类型食品安全相关 - 严重程度高触发条件权威媒体负面报道 - 首发平台今日头条 - 标题《XX乳业某批次产品被抽查发现问题》 - 传播趋势1小时内相关讨论86条环比上升320% - 相关链接xxx / xxx / xxx - 建议动作公关运营 确认情况准备回应口径为什么强调告警内容要带“建议动作”因为舆情预警的目标不是让接收人“知道发生了什么”而是让接收人“知道该做什么”。如果一条告警只给一个标题链接接收人还得到系统里点来点去查详情预警效率就大打折扣了。分发渠道上企微和钉钉走的是机器人 webhook短信走的是云厂商接口邮件走的是SMTP。每个渠道都有独立的线程池和重试机制避免一个渠道的网络抖动拖慢其他渠道的推送。4.4 大模型辅助研判从“触发告警”到“看懂告警”2024 年到 2025 年大模型这一波技术演进给舆情系统带来的提升是实实在在的。以前我们做舆情研判主要靠人去读告警、看趋势图、写研判报告。现在 Infoseek 里接入多模态大模型做了两层辅助工作。第一层是辅助研判。告警触发后大模型会根据告警关联的所有相关内容自动生成一段简要分析包括事件主体、可能的舆情走向、涉及的主要矛盾点。这层能力替代的正是以前值班人员最耗时的“信息收集 整理”环节。模型的价值不是做判断而是把信息摆整齐让人的判断更快。第二层是自动化报告生成。日报、周报这些固定的内容以前要花一个多小时排版、填表、写摘要现在直接由大模型根据当天所有预警事件和趋势数据生成初稿人工审核微调后就能发出去。团队一个月节省下来的时间相当可观。另外底层视觉模型从 qwen2-vl 到 qwen2.5-vl 再到 qwen3-vl 的迭代也让我们在图像舆情这块的识别能力显著提升。早期版本对模糊的截图、水印遮挡的图片识别效果不太理想后来升级到 qwen3-vl 之后对复杂版面、混合文字图片的理解能力明显增强。舆情数据的模态不再局限于文本短视频里的对话字幕、新闻图片里的关键文字、截图里的评论区都成为可分析的信息源。这部分的接入策略我比较想强调的是“用对场景、控制成本”。不是每条告警都要跑大模型而是只跑那些规则无法精确判断的复杂场景。模型推理的成本和使用频率必须做严格的配额管理否则月底账单会让你怀疑人生。5. 实践中的坑与排查实录那些影响预警延迟的隐形杀手5.1 事件时间与处理时间的错位为什么延迟会突然飙升这是流式计算绕不开的经典问题也是我们排查过最久的一个问题。某个阶段系统延迟经常从正常的一分钟跳变到五分钟以上一开始怀疑是 Kafka 堆积看监控数据又正常。后来深入排查才发现问题出在“事件时间”和“处理时间”的错位上。爬虫抓取的内容实际发布时间和抓取时间经常相差几十秒到几分钟。如果 Flink 作业按处理时间processing time做窗口计算那一切正常可一旦改用事件时间event time就必须配置 watermark。我们的 watermark 设置过于保守——为了不让延迟数据丢失给了 3 分钟的等待时间。这就意味着数据至少要等 3 分钟才能触发窗口计算半小时的预警时间预算直接被吃掉了一大半。解决方法是针对不同信源设置不同的 watermark 延迟。S级信源的内容基本是准时触达延迟只给 10 秒A级信源给 60 秒B级信源允许 120 秒。这样既保证了数据的完整率又把不必要的等待时间压缩到最短。注意分钟级预警系统的 watermark 设置不是越大越好。数据完整性、系统复杂度、端到端延迟之间必须找到一个你可以接受的平衡点。5.2 窗口边界与活跃分区流量倾斜引发的计算滞后另一个线上问题来自流量倾斜。某几个头部实体的数据量远大于其他实体导致这几个实体的 key 所在的 Flink 子任务长期满负荷而其他子任务的空闲率高达 90%。满载的子任务处理不过来窗口计算结果就迟迟出不来预警自然也就慢了。排查过程其实比较直接在 Flink UI 上看到各子任务的繁忙程度差异极大结合数据特征确认是热门实体导致的热点问题。解决思路有两种一种是热 key 拆分把同一个实体的数据拆成多个子 key 并行处理但这样会破坏同一个实体的数据顺序性对聚合准确性有影响另一种是增加并行度并进行资源隔离给热门实体的数据专用一个独立的处理组。我们最终采用的是第二种方案。简单直接、逻辑清晰没有引入额外复杂度。这也是我越来越深的体会流式计算里的很多问题靠的不是神级算法而是合理的资源切分和冗余设计。5.3 数据重复与消息幂等避免同一个事件被推三次舆情数据重复太常见了。一个页面被多个爬虫抓取同一篇文章被多平台转载Flink 重启之后从 Kafka 重新消费。如果这些重复数据不加处理最终结果就是同一个事件触发多条一模一样的告警或者聚合统计虚高。我们在三个环节做了幂等处理采集层的指纹去重前面讲过了解决的是同一内容被重复抓取的问题。传输层给每条消息分配唯一的event_idKafka 消费者的 offset 提交配合 Flink Checkpoint 机制保证消息最多处理一次或精确一次。预警服务层维护一个“已推送消息 ID”的缓存重复的告警请求如果命中了缓存直接丢弃或合并为一条更新通知。这三层保障叠加下来实际运行中重复推送的概率可以忽略不计。5.4 预警风暴与降噪策略从“告警疲劳”到“有效告警”最后聊一个可能只有真正运营过舆情系统的人才会懂的问题预警风暴。所谓预警风暴是指某个重大事件爆发后短时间内几十条规则同时命中每个实体都在触发高优告警接收人的企业微信被刷屏。这种状态持续几小时后接收人对所有告警都麻木了——这比“没有告警”更危险因为真正紧急的信号反而会被忽略。Infoseek 的降噪策略第一步是所有规则必须配置冷却时间除非是最高等级的突发事件否则不允许高频推送第二步是设计了“告警去重合并”机制——同一实体下的多条规则命中会合并成一条综合告警而不是各自独立推送第三步是引入“事件升级”概念——如果一条告警推送后相关讨论量在 30 分钟内继续高速增长系统会推送一条“事件升级”通知而不是重新推送原始告警。这套降噪策略上线后告警数量减少了接近一半但接收人反馈“有效告警”的比例反而上升了。预警这件事从来不是越多越好而是越准越好、越及时越好。6. 性能调优与容量评估按数据体量做合理规划6.1 数据量估算目标容量倒推组件规格系统上线前做容量规划我们用的方法是倒推先估算极端情况下的峰值数据量再反推每个组件的规格。假设全网监控信源 5 万个A级信源 1 万个每 5 分钟抓一次每个信源平均产出 5 条内容S级信源 300 个每 30 秒抓一次每个产出 2 条内容。不考虑突发流量的情况下A级信源贡献的数据量10000 × 5 / 5min 10000 条/分钟S级信源贡献的数据量300 × 2 / 0.5min 1200 条/分钟合计常态化数据量约 11200 条/分钟考虑到突发事件时流量可能放大 10 倍峰值数据量预估为 11 万条/分钟大约是每秒 1800 条。如果每条内容平均 2KB每秒的数据吞吐量约 3.6MB/s峰值 36MB/s。Kafka 集群的规格就按照这个峰值来配3 个 broker 节点每个节点 32GB 内存2TB 磁盘单分区吞吐能力大约能覆盖 50MB/s。Flink 作业的并行度设定为 8每个并行子任务承担约 200 条/秒的处理压力余量比较充足。6.2 延迟瓶颈定位三个常用监控指标速查系统上线后怎么判断哪个环节是瓶颈我的经验是重点盯三个指标Kafka 消费延迟consumer_lag是最直观的指标。如果这个数字持续增长说明消费者处理速度跟不上生产速度瓶颈在下游。Flink 反压指标Flink UI 上每个算子都有 BackPressure 状态如果显示 HIGH说明当前算子的下游处理能力不足需要扩容或优化算子逻辑。规则引擎执行耗时我们自己埋了 P99 耗时的监控。如果单条规则匹配耗时超过 50ms说明规则本身过于复杂或者数量太多需要考虑拆分和优化。实际经验是80% 的延迟问题都能在这三个指标里找到线索。如果三个指标都正常但端到端延迟仍然很高那就去检查采集层——很可能是某个信源的抓取间隔太长数据本身到达就晚了。6.3 资源冗余的度既要抗住峰值又不能浪费成本最后说一个务实的建议。舆情系统最纠结的问题是为了应对可能一年只发生几次的重大事件到底要预留多少资源Infoseek 的方案是双轨制。常态下集群按 2~3 倍的常规峰值配置资源保证日常预警质量遇到重大事件即将爆发时通过 K8s HPA 自动扩容计算节点同时把部分非核心的离线分析任务降级或暂停把资源优先让给实时链路。这个思路的本质是把有限的资源投入到当前最大价值的业务目标上。平时离线分析的数据可以晚一点跑但实时预警一刻都不能停。自动化扩缩容和任务降级配合才能让成本与可靠性之间取得平衡。7. 关于 Infoseek 这套架构我最后的经验与体会整个拆解下来Infoseek 的架构其实不神秘甚至可以说相当朴素。Kafka、Flink、ES、规则引擎都是业内非常常见的工具组合。真正让它实现分钟级预警的不是某个“黑科技”组件而是从头到尾贯穿的“延迟预算”思维以及每个环节精准的控制。我实际做这套系统最深的三点体会第一实时系统的设计核心不是“选什么技术”而是“把延迟预算拆清楚”。每一层都严格控制在预算内整体结果自然可控。一旦某一层失控后面靠堆资源、调参数补都补不回来。第二规则引擎和模型是互补关系不是替代关系。能白纸黑字写清楚规则的场景就用规则规则描述不清楚、需要综合判断的场景才让模型参与。分开用效果最好混着用只会徒增排查难度。第三舆情预警的价值不在于推送数量而在于内容质量。如果一条告警没写清楚发生了什么、为什么发生、下一步该做什么那它就只是一条噪音。把告警内容当成一个产品来做接收人的满意度会有质的提升。如果你也在做类似的事我建议不要一上来就追求高大上的架构。先把延迟预算算清楚把采集、传输、计算、推送这四段链路跑通再逐步增强智能分析能力。路径其实很清晰剩下的就是一步一步把它落地了。