前言
假如你做了一个Multi-Agent协作系统,三个Agent分别负责调研、写作和审核。
但系统跑起来之后,发现了一个致命的问题:Agent之间的通信太乱了。
A Agent调用B Agent,B Agent调用C Agent,C Agent的结果又要回传给A。
同步HTTP调用串起来,一个任务跑下来要十几秒。
更麻烦的是,中途任何一个Agent挂了,整个链路就断了,之前跑的结果全丢。
这种情况该如何优化呢?
答:Agent之间的通信改成Kafka。
Agent把自己的输出发到Topic,下游Agent订阅消费,异步非阻塞。主Agent发完消息立刻返回,各个Agent并行工作。整个任务的执行时间从十几秒降到了三秒以内。
Kafka正在从一个“消息队列”进化成AI应用的“Agent通信总线”和“实时上下文引擎”。
2026年,Kafka在AI方向上的布局已经全面铺开——MCP协议、A2A协作、实时上下文引擎、Streams做Agent记忆,一条完整的AI能力矩阵已经成型。
今天这篇文章,我就专门跟大家一起聊聊Kafka已接入AI这个话题,希望对你会有所帮助。
更多项目实战在Java突击队网:susan.net.cn/project
一、Kafka为什么要接入AI?
在聊具体能力之前,我们先理解一个根本问题——为什么Kafka要做这件事?
传统业务系统对消息队列的诉求是“解耦、削峰、异步”。
Kafka凭借高吞吐、持久化、分区有序的天然优势,在这个领域已经做到了极致。
但AI应用对消息层的诉求跟传统业务系统完全不同:
- 需要让AI Agent直接操作Kafka集群
- 需要把Kafka的实时状态喂给Agent做决策
- 需要用Kafka做Agent之间的通信总线和记忆存储
- 需要让Kafka的实时数据成为RAG的上下文来源
这些需求,恰好命中了Kafka的老底子——高吞吐、持久化日志、分区有序、可回放。
Confluent团队在博客中说了一句话,很能说明问题:“AI模型越来越同质化,真正的竞争力不是用哪个模型,而是你的Agent能不能看到并响应业务的实时状态。”
一句话总结:Kafka不是在“蹭AI的热度”,而是在用自己最擅长的方式——可靠的事件流、有序的日志、可回放的持久化——解决AI应用最核心的通信与上下文问题。
二、Kafka AI能力全景图
2026年的Kafka,已经从单纯的消息中间件进化成了AI应用的数据基础设施。
下面我逐一拆解这四大能力。
三、能力一:Kafka官方MCP Server
这是2026年Kafka在AI方向上最重要的一次动作。
3.1 为什么需要MCP?
Kafka的操作面极其庞大——5个核心API(Producer、Consumer、Streams、Connect、Admin),超过100种操作。
想操作Kafka,你得写Java/Python代码、用CLI工具、或者调Connect REST API。
AI Agent一个都够不着。
你没法跟Claude说“帮我创建一个12个分区、保留3天的Topic”,也没法跟Cursor说“查一下消费者组X的lag”。
这些在AI辅助工作流中本该是琐碎的操作,全都被挡在了门外。
2026年4月,Apache Kafka正式提出了KIP-1318提案——为Kafka添加第一方、Apache许可的MCP Server。
3.2 KIP-1318的核心设计
独立模块:在tools/mcp-server下新增一个独立模块,打包为JSON-RPC 2.0服务器,运行在Broker进程之外。
零协议变更:不修改Kafka协议、公共API或客户端行为。所有标准安全属性(security.protocol、sasl.*、ssl.*)直接传递给底层的Admin、KafkaProducer和KafkaConsumer实例。
两种传输模式:支持stdio(本地执行)和HTTP(远程部署)。
MCP工具(状态变更操作) :
- Topic管理:
create_topic、delete_topic、alter_topic_config、create_partitions - 消息操作:
produce_message、produce_batch、produce_transactional、consume_messages - 消费者组管理:
delete_consumer_group、alter_consumer_group_offsets - ACL管理:
create_acls、delete_acls - 集群/Connect操作:管理Connector、修改Broker配置、触发Leader选举
MCP资源(只读数据) :通过kafka:// scheme暴露资源,如kafka://topics/{name}、kafka://groups/{id}/lag、kafka://cluster。
分阶段发布策略:
- Phase 1(核心) :Topic、消息、消费者组、偏移量、集群基础操作
- Phase 2(安全+Connect) :ACL管理和Kafka Connect工具
- Phase 3(高级) :事务性produce/abort、Share/Streams组、Leader选举
四、能力二:Agent的实时上下文引擎
2026年5月,Confluent Intelligence的Real-Time Context Engine正式GA。
4.1 它解决什么问题?
AI Agent的最大问题不是智力不够,是上下文不够。Agent需要跨系统、跨会话、跨时间地访问数据——CRM里的客户信息、文档库里的知识、实时事件流里的状态。
传统的做法是给Agent接一个数据库。但Agent的查询是“低频、低延迟、点查”的,用数据库做这件事成本高、延迟大。
Real-Time Context Engine的做法是:直接在流数据上做低延迟查询,不需要额外搭建数据库。
4.2 核心能力
增强查询支持:过滤器、范围查询、复合查询、投影、排序——全部在流数据上低延迟完成。
无限扩展:随流数据的量和基数增长而扩展,流量增长不会强迫你引入独立的运维数据库。
全Schema支持:AVRO、JSON和Protobuf,与Schema Registry深度集成。
通过MCP暴露:Real-Time Context Engine通过MCP协议向任何AI Agent或应用提供新鲜上下文。Agent可以用自然语言查询实时表。
4.3 架构原理
五、能力三:KTable物化会话上下文
有些小伙伴在工作中可能遇到过这样的场景:Multi-Agent系统需要共享对话历史,每个Agent都要知道之前发生了什么。你给Agent接了个Redis或PostgreSQL存会话,但Agent的对话还在Kafka上跑,又要多维护一套存储。
Kafka Streams给出了一个优雅的解法:对话本身就是日志,直接用Kafka Streams把日志物化成可查询的状态。
5.1 核心思路
当Agent通过Kafka通信时,每一条消息——用户发言、子Agent交接、最终回复——都是Topic上的一个事件。按conversationId做键,所有对话轮次自然落在同一个分区,保持有序。
然后Kafka Streams把这些事件按conversationId分组,聚合成一个单一的上下文对象,存放在状态存储中。
5.2 Java代码示例
StreamsBuilder builder = new StreamsBuilder();
// 合并多个对话相关的Topic
KStream<String, Turn> turns = builder
.stream("user.messages", Consumed.with(Serdes.String(), turnSerde))
.merge(builder.stream("subagent.responses", Consumed.with(Serdes.String(), turnSerde)))
.merge(builder.stream("agent.responses", Consumed.with(Serdes.String(), turnSerde)));
// 按conversationId分组,物化成KTable
KTable<String, ConversationContext> contextTable = turns
.groupByKey(Grouped.with(Serdes.String(), turnSerde))
.aggregate(
ConversationContext::new, // 初始化
(key, turn, context) -> context.append(turn), // 聚合逻辑
Materialized.<String, ConversationContext, KeyValueStore<Bytes, byte[]>>as("conversation-context-store")
.withKeySerde(Serdes.String())
.withValueSerde(conversationContextSerde)
);
// 启动
KafkaStreams streams = new KafkaStreams(builder.build(), props);
streams.start();
这段代码的核心价值:对话历史不再需要一个外部数据库,直接在Kafka内部物化成可查询的状态。
Agent通过交互式查询,在个位数毫秒内读取到完整的对话上下文。
5.3 窗口存储:配额与卡顿检测
除了KTable做会话记忆,Kafka Streams还提供了窗口存储,可以用来追踪轮次速率(turn-rate),实现配额管理和“用户卡住了”的检测。
// 用窗口存储追踪每分钟的对话轮次
KTable<Windowed<String>, Long> turnRate = turns
.groupByKey()
.windowedBy(TimeWindows.ofSizeWithNoGrace(Duration.ofMinutes(1)))
.count(Materialized.as("turn-rate-store"));
这个能力在实际业务中非常实用。比如当某个用户的对话轮次突然飙高,可能意味着用户在某个问题上卡住了,系统可以主动介入提供帮助。
六、能力四:Agent间跨平台协作
2026年Q1,Confluent Intelligence新增了A2A(Agent-to-Agent)集成。
6.1 它解决什么问题?
企业在CRM、数据仓库、运营系统和定制应用中都部署了AI Agent,结果变成了Agent孤岛。LangChain的Agent没法跟Salesforce的Agent协作,CrewAI的Agent没法调SAP的Agent。
A2A集成让Streaming Agents能够跨任何支持A2A协议的平台进行协作和任务编排——包括LangChain、CrewAI、SAP、Salesforce等。
底层通过可靠、可回放的Kafka主干来支撑。
6.2 架构原理
Kafka在这里扮演的是Agent间通信的可靠总线。
A2A协议定义了Agent之间怎么发现、怎么调用、怎么回传结果。
Kafka提供了底层的事件流和回放能力。
七、AI怎么和Kafka配合工作?
根据Confluent的官方推荐,AI和Kafka的集成有三种可复用的模式。
7.1 模式一:外部RPC模式
Kafka消费消息,调用LLM API。
这是最常见的模式:Kafka消费者从Topic拉取消息,异步调用LLM API(OpenAI/Anthropic/Bedrock),把结果写回下游Topic。
适用场景:消息增强、内容分类、情感分析、工单自动分类。
Java代码示例(基于Ollama的Kafka Agent):
// 消费原始工单事件
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("support-tickets.raw"));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records) {
// 调用LLM进行富化
String enriched = enrichWithLLM(record.value());
// 发布到下游Topic
producer.send(new ProducerRecord<>("support-tickets.enriched", enriched));
}
}
private String enrichWithLLM(String rawTicket) {
String prompt = "请分析以下工单,返回JSON格式,包含分类、优先级、情感、路由队列、摘要和建议回复:\n" + rawTicket;
// 调用Ollama
return ollamaClient.generate(prompt);
}
这个模式的核心价值:Kafka保持系统流控,LLM作为无状态的富化步骤。
7.2 模式二:异步任务队列模式
Kafka解耦LLM调用。
把大模型API直接写进同步Web请求,原型阶段很简单。
但进入真实业务后,模型响应时间不可控,可能遇到连接超时、上游限流、临时服务错误。
Web进程一直等待,连接池、工作线程和反向代理超时会相互影响。
更稳妥的做法是把“接受任务”和“执行模型调用”拆开:
核心设计要点:
- task_id做幂等:先登记任务,再发布消息。用
task_id作为消息键,确保同一任务的消息进入同一分区。 - 先保存结果,再提交位点:如果先提交位点后保存结果,进程在两者之间崩溃会造成任务丢失。常见选择是“至少一次消费 + 业务幂等”。
- 死信队列兜底:超过重试上限的消息写入
llm.jobs.dlq,由人工或补偿程序检查。
7.3 模式三:Kafka Streams + 上下文引擎模式
这是最高级的模式:用Kafka Streams物化Agent记忆,用Real-Time Context Engine提供实时上下文查询,Agent通过MCP协议直接访问。
适用场景:Multi-Agent协作系统、实时RAG、事件驱动的智能决策。
八、优缺点
优点
1. 官方MCP支持,Agent原生操作Kafka
KIP-1318提案为Kafka添加了第一方MCP Server。AI Agent可以通过自然语言管理Topic、读写消息、管理ACL、操作消费者组——不需要写任何Java/Python代码。
2. Real-Time Context Engine,零外部数据库
Agent可以直接在流数据上做低延迟查询。过滤器、范围查询、复合查询、排序——全部在流上完成,不需要搭建和维护独立的运维数据库。
3. Kafka Streams做Agent记忆,优雅且高效
对话本身就是Kafka上的事件日志。Kafka Streams把日志物化成KTable,Agent通过交互式查询在个位数毫秒内读取完整上下文。不需要Redis、不需要PostgreSQL。
4. A2A跨平台协作
LangChain的Agent可以跟Salesforce的Agent协作,CrewAI的Agent可以调SAP的Agent。底层通过可靠、可回放的Kafka主干支撑。
5. 异步解耦,高可靠
LLM调用天然是慢的、不稳定的。Kafka把“接受任务”和“执行模型调用”拆开,失败可重试、可追踪、可补偿。
6. 社区生态爆发式增长
已经存在至少五个开源的Kafka MCP Server实现。OCI Kafka MCP Server支持LLM安全地管理Kafka集群。Nussknacker可以通过可视化方式把Kafka状态暴露为MCP工具。
缺点
1. KIP-1318仍处于讨论阶段
KIP-1318目前在Apache Wiki上的状态是“Under Discussion”,尚未正式实现。你需要等待它落地才能用上官方MCP Server。
2. 社区MCP实现存在功能缺口
现有的社区MCP实现缺少ACL管理、事务性produce语义、Kafka Streams/Share Group操作。最完整的实现(mcp-confluent)只支持Confluent Cloud REST API,不支持原生Apache Kafka。
3. 延迟不适用于实时交互
用Kafka做异步LLM调用适合摘要、分类、文档分析等场景。对必须在数百毫秒内完成的交互,Kafka的排队、序列化和结果查询会增加额外延迟。
4. 可能产生重复外部调用
即使有幂等设计,Worker可能已经获得上游响应,却在本地落库前退出。只有当上游支持且明确承诺幂等键语义时,才能进一步压缩这一窗口。否则应把“可能产生重复调用及费用”纳入设计。
九、适用场景
| 场景 | 推荐程度 | 理由 |
|---|---|---|
| Multi-Agent协作系统 | ✅✅✅ 强烈推荐 | Agent通信总线,异步非阻塞,主Agent发完即返回 |
| 实时RAG管道 | ✅✅✅ 强烈推荐 | 向量搜索集成,实时上下文增强 |
| 事件驱动的AI决策 | ✅✅✅ 强烈推荐 | Streaming Agents原生运行在Kafka上 |
| LLM异步任务队列 | ✅✅✅ 强烈推荐 | 解耦、可重试、可追踪、死信兜底 |
| Agent记忆存储 | ✅✅✅ 强烈推荐 | Kafka Streams物化KTable,毫秒级查询 |
| 自然语言管理Kafka | ✅✅✅ 强烈推荐 | KIP-1318 + MCP Server |
| Agent跨平台协作 | ✅✅ 推荐 | A2A集成,打通LangChain/Salesforce/SAP |
| 需要毫秒级交互 | ⚠️ 需评估 | Kafka的排队和序列化有额外延迟 |
| 不支持幂等的上游 | ⚠️ 需评估 | 可能产生重复调用和费用 |
更多项目实战在Java突击队网:susan.net.cn/project
十、写在最后
回到最初的问题:Kafka接入AI,到底接了什么?
它不是“在Kafka上加了个AI功能”,而是把整个Kafka变成了AI应用的通信总线和上下文引擎。
从KIP-1318的官方MCP Server,到Real-Time Context Engine的低延迟上下文查询,到Kafka Streams的Agent记忆物化,再到A2A的跨平台Agent协作——2026年的Kafka,已经不再是那个“只做消息队列”的中间件了。
对于一个已经在用Kafka的Java团队来说,这意味着不需要引入新的技术栈,就能获得AI应用所需的Agent通信、上下文管理和实时RAG能力。