Kubernetes集群部署Apache Pulsar无法消费JSON数据问题咨询
Apache Pulsar JSON格式消息生产消费异常解决方案
普通文本消息可正常消费说明集群网络、权限、Topic链路均无异常,问题集中在序列化/反序列化配置、Schema规则匹配两个维度,对应可行方案如下:
核心解决方案
- 统一两端序列化/反序列化规则
禁止生产者使用JSON Schema、消费者默认使用String Schema的混用配置,不同语言客户端需做对应适配:
Java客户端生产者配置:setSerializationSchema(JsonSchema.of(自定义实体类.class))
Java客户端消费者配置:setSchema(JsonSchema.of(自定义实体类.class))
Go、Python等其他语言客户端需同步配置JSON Schema,避免跨语言类型映射错误。 - 修正消息元数据配置
生产JSON消息时需正确设置Content-Type为application/json,若使用pulsar-client命令行测试生产,需添加JSON Schema声明参数:pulsar-client produce persistent://public/default/目标Topic名 -m '{"id":1,"content":"测试数据"}' -s json - 调整JSON Schema校验规则(按需)
若业务场景允许JSON存在空值、额外未声明字段,可关闭消费者侧严格校验:
配置JsonSchemaConfig.setAllowNullValues(true)允许空值,配置JsonSchemaConfig.setIgnoreUnknownFields(true)忽略未声明的额外字段,避免合法JSON被校验拦截。 - 排查K8s集群Schema注册表配置
若使用Helm部署Pulsar集群,默认开启Schema校验,若集群全局Schema兼容模式设置为ALWAYS_COMPATIBLE,新增JSON Schema若与Topic历史Schema不兼容会被拦截,可通过pulsar-admin调整兼容模式,或删除Topic历史Schema后重新注册验证。
快速验证步骤
- 查看目标Topic当前绑定的Schema信息:
pulsar-admin schemas get persistent://public/default/目标Topic名 - 使用命令行消费者指定JSON Schema测试消费:
若命令行可正常消费,说明问题出在业务代码的序列化配置,反之排查集群侧Schema规则配置。pulsar-client consume persistent://public/default/目标Topic名 -s test-sub -n 0 -s json
内容的提问来源于stack exchange,提问作者Pavan Kalyan
相关产品推荐
相关产品推荐

