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

如何用Ruby将Avro二进制数据适配vnd.kafka.binary.v1+json端点调用?

回答:不是的,直接用envBuffer.string.to_json_raw_object无法正确调用该端点

你需要遵循Kafka REST Proxy针对vnd.kafka.binary.v1+json格式的要求来处理数据,具体步骤和原因如下:

为什么你的当前做法不对

envBuffer.string是Avro编码后的原始二进制字节流,直接将其转成JSON对象会导致不可打印字符被破坏或序列化异常——JSON本身不支持原生二进制数据,必须通过编码转换才能安全嵌入JSON结构中。

正确的处理步骤

Kafka的二进制JSON格式要求将Avro二进制数据做Base64编码,然后放入特定的JSON结构里,具体Ruby代码示例如下:

# 1. 获取Avro编码后的二进制数据
avro_binary_data = envBuffer.string

# 2. 对二进制数据进行Base64编码(必须用严格模式避免换行)
base64_encoded_value = Base64.strict_encode64(avro_binary_data)

# 3. 构建符合Kafka REST要求的请求 payload
kafka_payload = {
  records: [
    {
      value: base64_encoded_value
      # 如果你的消息需要key,同样对key的Avro二进制数据做Base64编码后添加:
      # key: base64_encoded_key
    }
  ]
}

# 4. 将payload序列化为JSON字符串,用于发送请求
request_body = kafka_payload.to_json

发送请求的注意事项

  • 必须设置请求头 Content-Type: vnd.kafka.binary.v1+json,否则端点无法正确解析你的数据
  • 确保你使用的Avro Schema(envSchema)与Kafka主题对应的Schema完全一致,否则会出现解码失败
  • 如果需要批量发送多条消息,只需在records数组中添加更多包含value(或key)的对象即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:11:33