PubSub转BigQuery订阅异常:消息入死信队列+时间解析错误
PubSub转BigQuery订阅问题排查
我创建了一个PubSub转BigQuery的订阅,配置了死信队列,相关Schema如下:
问题1对应的Schema
Avro Schema
{ "namespace": "com.x.y.z.model", "name": "XYZDataPoint", "type" : "record", "fields" : [ { "name" : "id", "type" : "string" }, { "name" : "name", "type" : "string" }, { "name" : "created_at", "type" : { "type": "long", "logicalType": "timestamp-micros" } } ] }
BigQuery Schema
[ { "name" : "id", "type" : "string", "mode" : "NULLABLE" }, { "name" : "name", "type" : "string", "mode" : "NULLABLE" }, { "name" : "created_at", "type": "TIMESTAMP", "mode" : "NULLABLE" } ]
问题1现象
发布消息后,消息直接进入死信队列,未同步到BigQuery。死信队列中的消息示例:
{"id":"dddckdkc416-49a9-4cdnac-aa48-b07d8ckdsnaac2","name":"INITIATED","created_at":1693435133390}
补充:正常同步的订阅Schema
我另有一个同类型的订阅可以正常同步,其Schema如下:
Avro Schema
{ "namespace": "com.x.y.z.model", "name": "XYZStatusDataPoint", "type" : "record", "fields" : [ { "name" : "id", "type" : "string" }, { "name" : "status", "type" : "string" }, { "name" : "xyz_status", "type" : "string" }, { "name" : "date", "type" : { "type": "long", "logicalType": "timestamp-micros" } } ] }
BigQuery Schema
[ { "name" : "id", "type" : "string", "mode" : "NULLABLE" }, { "name" : "status", "type" : "string", "mode" : "NULLABLE" }, { "name" : "xyz_status", "type" : "string", "mode" : "NULLABLE" }, { "name" : "date", "type" : "TIMESTAMP", "mode" : "NULLABLE" } ]
问题2现象
这个订阅的消息能同步到BigQuery,但date字段解析错误,显示为1970-01-20 14:23:55.133390 UTC。
问题1解决方案
核心原因是时间戳精度不匹配:Avro Schema定义created_at为timestamp-micros(微秒级,需16位数字),但实际发送的created_at值1693435133390是毫秒级(13位),不符合Schema校验规则,导致消息被拒收打入死信队列。
修复方式二选一:
- 调整生产者代码,将
created_at转换为微秒级时间戳后发送; - 修改Avro Schema的逻辑类型为
timestamp-millis,匹配实际发送的精度:
{ "name" : "created_at", "type" : { "type": "long", "logicalType": "timestamp-millis" } }
问题2解决方案
同样是时间戳精度不匹配导致:Avro Schema按timestamp-micros解析,但生产者发送的是毫秒级时间戳,相当于把毫秒值当成了微秒,时间被缩小1000倍,因此显示为1970年初的错误时间。
修复方式二选一:
- 生产者发送时将时间戳转换为微秒级;
- 修改Avro Schema的
date字段逻辑类型为timestamp-millis:
{ "name" : "date", "type" : { "type": "long", "logicalType": "timestamp-millis" } }
内容的提问来源于stack exchange,提问作者SRJ
相关产品推荐
相关产品推荐

