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

Pulsar中curl上传特定Avro Schema卡住但Postman上传正常

故障根因

问题出在Bash变量引用的语法细节上:你在uploading_topic函数中使用--data-raw $SCHEMA传参时,没有给$SCHEMA加双引号。
Bash解析未加双引号的变量时,会按照内置IFS分隔符(默认是空格、制表符、换行)对变量内容做单词拆分:拆分后的第一部分会被识别为--data-raw的参数值,剩下的所有片段都会被curl当作待请求的目标URL处理。
短Schema(单层、双层嵌套的两个示例)定义时是单行无空白字符的格式,不会触发拆分逻辑,所以能正常上传。长嵌套Schema大概率在编写时为了可读性加入了换行、空格格式化(哪怕是混入的不可见空白字符),触发了拆分:curl拿到的请求体残缺,同时会尝试连接拆分出来的无效“URL”,在等待DNS解析、连接超时的过程中就会表现为请求永久挂起无返回。Postman直接传递完整请求体,不存在shell参数拆分问题,所以请求正常。

修复方法

核心修复

给$SCHEMA变量包裹双引号,强制shell将其作为单个完整参数传递给curl,修改后对应参数行如下:

--data-raw "$SCHEMA"

可选优化

  1. 超长Schema场景建议用文件传参,彻底规避命令行参数转义、拆分风险:
# 先将完整Schema写入临时文件
echo "$SCHEMA" > /tmp/current_schema.json
curl --location --request POST "https://$PULSAR_HOST:$HOST_PULSAR_PORT/admin/v2/schemas/$TENANT/$NAMESPACE/$TOPIC/schema" \
    --max-time 30 \
    --fail \
    --verbose \
    --header "Authorization: Bearer $AUTHORIZATION"  \
    --insecure \
    --header 'Content-Type: application/json' \
    --data @/tmp/current_schema.json 2>&1 | grep "HTTP"
# 清理临时文件
rm -f /tmp/current_schema.json
  1. 给curl增加--max-time 30参数设置全局请求超时,增加--fail参数让HTTP错误码直接返回非0退出值,避免脚本异常挂起。

额外提示:你当前用单引号定义Schema变量,内部的$TENANT/$NAMESPACE/$TOPIC不会被Bash解析替换,最终上传的Schema namespace会保留$符号的字面量。如果需要动态替换这几个值,要把最外层的单引号改成双引号,同时对内部的JSON双引号做转义处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:03:23