首页 › AI快讯 › 处理4000万条消息后,团队总结Kafka会话级有序处理设计

处理4000万条消息后,团队总结Kafka会话级有序处理设计

希
希鸥网AIGC专员
· 2026-11-02 · AI快讯 · 来源:InfoQ 中国 1,193 次阅读

在对话式AI场景中,Kafka仅能保证分区内顺序,当多个会话共用同一分区时,应用层仍需自行完成路由,才能既保证每个会话内部的消息顺序,又允许不同会话并行处理。一个面向企业客户的实时对话式AI平台为此用Go语言构建了核心Kafka消息层,管道包含接入、自然语言理解、大语言模型推理和消息送达四个阶段,同一会话的消息必须依次经过这四个阶段。

该平台采用两层工作协程架构:一组轻量级分发协程从Kafka接收记录,按会话ID做一致性哈希路由,确保同一会话的消息总是到达同一个工作协程;每个活跃会话由独立goroutine按到达顺序逐条处理,按需创建、不活跃后移除,使资源消耗与活跃会话数匹配。不同会话之间的并行度在设计上不设上限,会话内串行则由架构本身保证。

重试机制也做了简化。早期实现使用单独的重试goroutine并在内存中暂存后续消息,导致状态机复杂、内存存在无限增长风险。现方案在原会话goroutine内对失败消息进行带退避的重试,处理完再取下一条,既保留顺序,也省去了单独的重试状态机。

偏移量提交采用连续水位线策略,只提交到最高的连续完成位置,避免崩溃恢复后因较晚消息已完成而跳过较早但尚未完成的消息。生产环境还需运维层面加固,包括再均衡时排空任务、背压、待处理记录缓冲、卡住的偏移量检测、幂等性、优雅关停和死信队列处理。

该系统已在生产环境处理超过4000万条消息,覆盖数千个并发聊天会话,未观察到顺序错误。团队此后在测试中将发送端吞吐量提升至每秒10万条以上,且没有发送错误。团队指出,“一个会话对应一个分区”并不可行,并发会话达数千时分区数量会超出运维承受能力并拖累broker性能。

📖 阅读本文共 1,193 次 2026年11月02日 08:30
📱 长按识别 分享给好友~
视频号二维码

扫码查看视频号

客服头像 咨询 咨询