kafka-avro-console-producer报无法解析null schema异常
报错核心根因
报错和Avro schema语法、Schema Registry服务状态无关——你能通过Gradle插件正常生成对应Java类,就证明schema本身书写完全合规。触发报错的直接原因是shell命令解析时出现参数传递偏差:
- 原命令中
--property value.schema= '\的写法,在等号和后续单引号之间多了一个空格 - Kafka控制台工具解析
--property key=value格式参数时,会严格按照等号切割键值对,等号后紧跟空格会被判定为value.schema属性取值为空,后续单引号包裹的schema内容会被识别为独立的冗余参数,最终程序拿到的schema值为null,直接触发Avro空schema解析异常
修正后的可运行命令
移除等号与取值间的多余空格,调整后的完整命令如下:
[appuser@schema-registry bin]$ ./kafka-avro-console-producer \ --broker-list localhost:9092 \ --topic t.lower.case \ --property schema.registry.url='localhost:8081' \ --property value.schema='{ "namespace": "com.thebigscale", "type": "record", "name": "Customer", "fields": [ {"name": "first_name", "type":"string", "doc": "First name of the person"}, {"name": "last_name", "type":"string", "doc": "Last name of the person"}, {"name": "age", "type": "int", "doc": ""}, {"name": "height", "type": "double", "doc": ""}, {"name": "weight", "type": "double", "doc": ""}, {"name": "automated_emails", "type": "boolean", "default":true, "doc": ""} ] }'
同类场景排查注意事项
- 所有
--property格式的键值对,等号与取值之间不能留多余空格,无论取值是短字符串还是跨行的长schema,必须严格遵循--property <属性名>=<取值>的格式 - 跨行拼接命令时,行尾的反斜杠前后不能留空格,否则会被shell识别为普通字符,导致换行拼接失效、参数被截断
- 给属性值加引号包裹时,引号必须紧跟等号,不能中间留空格,避免出现和本次报错一致的空值传递问题
内容的提问来源于stack exchange,提问作者tintin
相关产品推荐
相关产品推荐

