AI预警!Rust预警!胡说八道警告!
前言
我用vibe code的方式开发了一个纯Rust实现的Kafka客户端,性能还不错。在测试中,发现比Rust包装的rdkafka还快了一些————它是C库librdkafka的封装。
在上篇文章中介绍的kfk就是基于它来实现的。
有意思的 Kafka 协议
Kafka通信协议是挺有意思的,它基于自定义的二进制格式,在TCP的流上面,做了请求的多路复用。
- 使用length prefix来编码请求的长度,然后是请求的二进制数据。
- 使用correlation_id来关联请求和响应。
- 使用握手协商版本来确定每类请求的版本。
- 而编解码,又有一套flexible的编码格式, called "flexible encoding"。
- 消息体的定义,又是提供基于json的定义,方便开发。
不过,客户端和服务器的交互,需要客户端感知和处理的东西太多了,这点我不是很喜欢。
实现
在Rust的实现中,就是利用了json的消息定义,使用codegen的方式来生成消息体的struct。再利用Rust生成宏和trait来做编解码。
根据分层的架构,
- Transport层,负责底层连接,TCP和TLS。
- Wire层,负责消息的编码解码。使用Tokio的Frame来实现。
- Application层,在协议交互之上,负责Consumer和Producer的逻辑。
另外,提供了SASL协议验证,还有TLS通信。
性能比较
就问你快不快,至于是否正确,你就不要管了。
通过forkrdkafka的benchmark,加上kafka_client的benchmark,来对比性能。
结果可以查看这里
AI给出的结论:
1. kafka_client 全面领先
- 生产者平均提升 336.8%
- 消费者 Assign 模式平均提升 84.3%
- 消费者 Group 模式平均提升 33.6%
2. 消息越小,优势越明显
- 小消息场景(10B)kafka_client 优化效果最显著
- 大消息场景瓶颈在网络 IO,客户端实现差异不明显
3. Assign 模式性能碾压 Group
- Assign 比 Group 快几十到几百倍
- 如无消费组语义需求,优先使用 Assign 模式
4. 数据完整性验证
- 所有测试均通过消息计数、序列连续性、无重复验证
胡说八道
Vibe code盛行的今日,给二流的程序员提供了机会,也可以展示自己的能力。也让我这些可以输出代码,污染环境。
同时,Rust的特性,在AI agent中,好像更有利了一些,因为它的严格,以及性能。