带有 serde、quote、syn 和 proc_macro2 的 Apache Kafka 协议

主要观点:Tansu 利用 serde、quote、syn 和 proc_macro2 实现 Apache Kafka®协议,是 Apache Kafka 的替换方案,有多种存储引擎,基于 GNU AGPL 许可,用 Rust 编写。
关键信息

  • 从 2018 年底开始通过 KAFKA-7609 实现,协议消息从 JSON 文档生成,各消息有版本化模式,引入灵活类型和标记字段。
  • 详细介绍了 DescribeGroupsRequest 中不同版本下数组类型的编码差异,如 ARRAY[T]和 COMPACT_ARRAY[T],以及字符串类型的编码差异。
  • 说明Tagged Fields在灵活格式消息中的处理,在 mezzanine 模块中进行两阶段序列化,TagBuffer 和 TagField 用新类型实现自定义序列化和反序列化。
  • 以 FetchRequest 为例展示带标记字段的结构及处理方式,通过代码生成工具生成相关代码并整合到库中,还介绍了序列化 String 的过程。
  • Tansu 包含 Apache Kafka®Proxy 用于捕获客户端和代理之间的流量,通过测试用例验证编码和解码的正确性。
    重要细节
  • 早期 Kafka 协议实现用枚举变体表示各版本,后改为单 struct 表示所有版本,牺牲了序列化和反序列化的复杂性以简化代理代码。
  • 测试用例通过将原始字节反序列化为协议帧再序列化回来,验证编码和解码的正确性。
  • 生成的代码通过 include!(concat!(env!("OUT_DIR"), "/generate.rs"))整合到库中。
阅读 8
0 条评论