Aeron消息传递中消息分片相关技术问题咨询
Aeron分片相关问题解答
问题1:当消息大小超过MTU大小需进行分片时,分片操作是否在将消息写入logbuffer时执行?
是,分片操作在发布端将消息写入logbuffer的阶段执行。Aeron会在发布环节直接把超过MTU的大消息拆分为符合传输要求的分片,再写入logbuffer,订阅端从logbuffer读取到的就是已经分片后的内容。
问题2:若上述问题答案为是,当一条大消息被拆分为3个分片时,第一个分片的头部会带有'B'标记,第二个分片无分片位置标记,第三个(最终)分片头部带有'E'标记。当这些分片发送给订阅者时,若分片乱序送达(例如先收到第二个分片),Aeron如何判断收到的是分片而非完整消息?
每个分片的头部都包含分片标识字段和唯一的原始消息ID,即使是中间不带B/E标记的分片也不例外。订阅端通过以下逻辑识别:
- 检查头部的分片标识,只要该标识存在,就判定当前收到的是分片,而非完整消息;
- 借助原始消息ID,订阅端可以将同一条原始消息的所有分片关联起来,存入分片缓存;
- 分片头部还包含原始消息的总长度信息,订阅端可据此确认是否收集齐所有分片,直到收到带'E'标记的最终分片后,再重组为完整消息处理。
哪怕乱序收到中间分片,只要读取到头部的分片标识,就不会将其当作完整消息处理,而是先缓存等待同组的其他分片。
内容的提问来源于stack exchange,提问作者starbucks pete
相关产品推荐
相关产品推荐

