Kafka已正式接入AI

0 阅读12分钟

前言

假如你做了一个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应用的数据基础设施。

image

下面我逐一拆解这四大能力。

三、能力一: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.protocolsasl.*ssl.*)直接传递给底层的Admin、KafkaProducer和KafkaConsumer实例。

两种传输模式:支持stdio(本地执行)和HTTP(远程部署)。

MCP工具(状态变更操作)

  • Topic管理create_topicdelete_topicalter_topic_configcreate_partitions
  • 消息操作produce_messageproduce_batchproduce_transactionalconsume_messages
  • 消费者组管理delete_consumer_groupalter_consumer_group_offsets
  • ACL管理create_aclsdelete_acls
  • 集群/Connect操作:管理Connector、修改Broker配置、触发Leader选举

MCP资源(只读数据) :通过kafka:// scheme暴露资源,如kafka://topics/{name}kafka://groups/{id}/lagkafka://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 架构原理

image

五、能力三: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 架构原理

image

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进程一直等待,连接池、工作线程和反向代理超时会相互影响。

更稳妥的做法是把“接受任务”和“执行模型调用”拆开

image

核心设计要点

  • 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能力。