前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >日更系列之如何快速排查protobuf数据格式

日更系列之如何快速排查protobuf数据格式

原创
作者头像
mariolu
发布2022-03-01 00:12:54
1.4K0
发布2022-03-01 00:12:54
举报

一、背景

之前和同事定义一个pb数据格式问题,他那边负责生产数据源,然后转pb再存到redis,然后我来消费这个pb,进行解开。这个过程不涉及到数据压缩如snappy。首先我消费线程代码写好了,来和他联调这份数据。但是我这边代码解析失败了。

消费者线程使用的是C++程序,对于c++解析pb格式的数据,无非就是两种api接口ParseFromString()和ParseFromArray。这两个接口对应于json的“{}”和“[]”格式,但是都失败了。

二、redis-cli工具查数据

那么我先使用排查是我消费者线程写的有问题。我使用了redis-cli工具,直接从数据库拿出来写到文件。

代码语言:javascript
复制
redis-cli -h [域名] -p [端口] get [redis key] > /tmp/1650.pb

然后呢因为这个域名是redis集群的其中一个ip,所以有时候会取不到数据,第一次查询可能会重定向到真实数据的那台机器ip。

三、protobuf工具

然后我就取到了pb数据,然后怎么验证这个pb是否正确呢,我找到了两个工具。

第一个是简单验证是否是protobuf格式的工具。这个工具使用过程我感觉有点漏报,就是该是pb,可能会被误认为非pb格式。

第二个工具是更推荐,他会根据proto定义文件,然后从原始pb转成json,也支持json转成pb。

3.1 第一个是fq工具

他其实是用于识别二进制文件的工具,识别protobuf只是它的一部分功能。

github宝藏库之fq:阅读二进制文件
github宝藏库之fq:阅读二进制文件

fq读取二进制数据。结果是一个 JSON结构,其中每项都有二进制位范围、符号备注,并以直观的方式呈现。github仓库: https://github.com/wader/fq

检查1650.pb这个文件是不是合法的proto文件,这样用

代码语言:javascript
复制
fq -d protobuf . 1650.pb

3.2 pb和json互转的简易命令行工具

第二个工具,是我在github找的一个用c++写的,pb和json互转的简易命令行工具

github仓库是这个https://github.com/hq6/ProtobufJson.git

编译完使用命令,就可以类似这样使用。

他这个仓库,我修改了Makefile才能编译成功,一个是加上-pthread,另一个是加上protobuf的头文件include路径和lib路径。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、redis-cli工具查数据
  • 三、protobuf工具
    • 3.1 第一个是fq工具
      • 3.2 pb和json互转的简易命令行工具
      相关产品与服务
      云数据库 Redis
      腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档