使用 Kafka + Protobuf 实现高效的序列化通信
文章目录
- 前言
- 使用 Kafka + Protobuf 实现高效的序列化通信
- 1. 概述
- 2. 通过 Protocol Buffers 协议进行序列化通信与其他方式的比较
- 3. maven 配置
- 4. 创建 .proto
- 5. 自定义序列化器
- 6. 通过.proto文件生成对应java文件
- 7. 配置序列化和反序列化示例
- 8. 生产者示例
- 9. 消费者示例
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
使用 Kafka + Protobuf 实现高效的序列化通信
1. 概述
Kafka 被广泛用于服务间的异步通信。而当服务间需要传输结构化数据时,选择一种高效、轻量、跨语言的数据序列化协议显得尤为关键。本文将介绍如何通过 Protocol Buffers(Protobuf)
2. 通过 Protocol Buffers 协议进行序列化通信与其他方式的比较
Protobuf 的优势:
优势点 | 描述 |
---|---|
高性能 | Protobuf 是二进制格式,序列化/反序列化速度快,占用带宽小。比 JSON、XML 快几十倍,体积更小。 |
跨语言支持好 | 官方支持多种语言(Java、C++、Python、Go、C#、JS等),可在微服务、跨平台系统中统一使用。 |
向前/向后兼容性强 | 可以添加字段而不影响旧系统,支持默认值和字段编号,适合长期维护和版本升级。 |
强类型定义 | 使用 .proto 文件定义结构,类型严格检查,适合大型工程开发、接口管理、自动生成代码等场景。 |
工具链完善 | 提供 protoc 编译器,可生成多语言代码,集成 CI/CD 简单高效。 |
结构清晰 | .proto 文件便于管理和文档生成,相比 JSON 更易统一管理 API 和数据模型。 |
Protobuf 的劣势:
劣势点 | 描述 |
---|---|
不可读 | 是二进制格式,不像 JSON/XML 那样可直接阅读和调试,开发排查困难。 |
学习曲线略高 | 需要学习 .proto 语法、使用 protoc 工具,不如 JSON 一目了然。 |
依赖工具链 | 需要 protoc 编译器和插件,部署或版本升级时需谨慎管理生成代码。 |
对动态字段支持弱 | 不如 JSON 那样天然支持动态键值结构(如 Map),虽然 protobuf3 改进了一些。 |
浏览器端使用较难 | 在纯 Web 环境中使用 protobuf 复杂度较高,需使用 protobuf.js 或额外编解码。 |
3. maven 配置
<!-- kafka -->
<dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.5.11.RELEASE</version> <!-- 支持 JDK 8 的稳定版本 -->
</dependency><!-- 数据结构序列化工具-->
<dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>3.5.1</version>
</dependency><!-- OS检测插件 -->
<plugin><groupId>kr.motd.maven</groupId><artifactId>os-maven-plugin</artifactId><version>1.7.0</version><executions><execution><goals><goal>detect</goal></goals></execution></executions>
</plugin>
<!-- protobuf插件 -->
<plugin><groupId>org.xolstice.maven.plugins