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

使用cURL调用Pulsar REST接口遇TooLongFrameException异常排查

Pulsar使用curl访问6650端口Admin API触发TooLongFrameException的原因

问题场景

  • 通过bin/pulsar-admin schemas get transactions命令可正常获取Schema,使用的client.conf配置如下:
authParams=
authPlugin=
brokerServiceUrl=pulsar://localhost:6650/
tlsAllowInsecureConnection=false
tlsCertificateFilePath=
tlsEnableHostnameVerification=false
tlsKeyFilePath=
tlsKeyStorePassword=
tlsKeyStorePath=
tlsKeyStoreType=JKS
tlsTrustCertsFilePath=
tlsTrustStorePassword=
tlsTrustStorePath=
tlsTrustStoreType=JKS
useKeyStoreTls=false
webServiceUrl=http://localhost:8080/
webserviceTlsProvider=
  • 但直接使用curl向localhost:6650/admin/v2/schemas/public/default/transactions/schema发送请求时,Broker日志抛出TooLongFrameException,错误日志如下:
2023-03-10T15:45:06,468-0700 [pulsar-io-19-8] WARN org.apache.pulsar.broker.service.ServerCnx - [/127.0.0.1:64346] Got exception io.netty.handler.codec.TooLongFrameException: Adjusted frame length exceeds 5253120: 1195725860 - discarded    at io.netty.handler.codec.LengthFieldBasedFrameDecoder.fail(LengthFieldBasedFrameDecoder.java:507) [long stacktrace]

原因解析

核心问题是端口使用错误:

  • 6650是Pulsar的二进制协议端口,专门处理基于Pulsar自定义二进制协议的请求(比如生产者/消费者的消息传输、pulsar-admin工具内部的协议交互),它不支持HTTP协议解析。
  • 8080是Pulsar的Admin API HTTP端口,对应配置文件中的webServiceUrl=http://localhost:8080/,所有Admin API的HTTP请求必须发送到这个端口。

当你用curl向6650端口发送HTTP请求时,Broker的Netty解码器会把HTTP请求的字节流错误识别为Pulsar协议帧。HTTP请求的起始内容(例如GET /admin/...)会被当作帧长度字段解析,计算出的长度值远超过Broker默认的帧长度上限(5253120字节),最终触发TooLongFrameException。

正确操作

使用curl访问Admin API时,应该指向8080端口,正确命令如下:

curl http://localhost:8080/admin/v2/schemas/public/default/transactions/schema

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:22:38