考虑一条protobuf消息:
message DataMessage {
int32 custId = 1;
string uuid = 2;
int32 version = 3;
string firmName = 4;
google.protobuf.Timestamp date = 5;
int32 accountNo = 6;
string firmName = 7;
bytes payload = 8;
}
我将其填充并将其编组为字节数组,并将其作为Kafka消息发布。所有这些都很棒。
现在要问的是:Kafka处理程序获取字节数组。我想做的是只修改字段2和3 ,而不必将字节数组解组为DataMessage,修改字段2和3然后将其编组为另一个字节数组,这样就可以Kafka发布到下一跳。字段3是一个字符串,但是是ISO格式的GUID。此处的修改不会增加或减少字段长度。
protob.Buffer
似乎无助于此。似乎一次允许对单个字段进行编码/解码。
有效负载(字段8)的大小为99%,不会被修改。我想跳过所有的临时副本,并进行编组/取消编组工作以修改1%。
可能吗?我猜想我是否知道字段2和3的字节数组中的偏移量,可以使用就地修改字节...但这在某种程度上损害了封送字节的完整性。通过使用fixed32而不是int32可以使此操作更容易...因此,字节数组中的偏移量是一致的。