You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java客户端向Apache Pulsar传输的数据显示为编码格式是什么原因

问题根因

你使用Schema.AVRO(DavisMessage.class)序列化自定义对象时,Pulsar会按照AVRO二进制编码规则将对象写入消息体:

  • 数值类型(float、short等)会被序列化为二进制字节,直接查看原始字节内容时就会显示为乱码
  • 字符串类型按照UTF-8编码写入,所以你可以直接识别到消息里的字符串内容

解决方案

1. 消费端使用对应AVRO Schema反序列化

消费时指定和生产者完全一致的AVRO Schema,即可直接解析出完整的DavisMessage结构化对象,参考代码:

Consumer<DavisMessage> consumer = client.newConsumer(Schema.AVRO(DavisMessage.class))
    .topic(topic)
    .subscriptionName("你的订阅名")
    .subscribe();

Message<DavisMessage> msg = consumer.receive();
DavisMessage parsedData = msg.getValue();
// 直接读取parsedData的各个字段即可

2. 命令行查看消息时指定Schema解析

如果是用pulsar-client命令行工具查看消息,加上-s avro参数即可自动解析AVRO格式的消息:

pulsar-client consume 你的Topic名称 -s 订阅名称 -n 1 -s avro

3. 需直接查看明文可更换序列化协议

如果你的业务场景需要直接查看消息明文,可以将序列化协议更换为JSON:

// 生产者初始化时替换Schema配置即可
Producer<DavisMessage> producer = client.newProducer(Schema.JSON(DavisMessage.class))
    .topic(topic)
    .create();

更换后消息体为可读的JSON字符串,直接查看不会出现乱码,但存储空间占用会高于AVRO编码。

内容的提问来源于stack exchange,提问作者Saverio Guzzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:45:03