7.4. 基于参考的消息传递流
当消息传递需要更多行程时,端到端延迟会增加。这个方法的另一个显著缺陷是,在清理 Kafka 消息时,外部系统中没有自动清理数据。混合方法是仅将大型消息发送到数据存储并直接处理标准化消息。
内联消息传递
内联消息传递非常复杂,但它对基于参考的消息等外部系统没有开销。
如果消息太大,则生成客户端应用必须序列化,然后对数据进行阻塞。然后,生成者使用 Kafka ByteArraySerializer
,或者在发送前再次序列化每个块。消费者跟踪消息和缓冲区块,直到它有完整的消息。消耗客户端应用程序接收块,这些块在进行序列化前被编译。根据每个块消息集合的第一个或最后一个块的偏移量,将完整消息发送到消耗应用程序的剩余部分。
消费者应仅在接收和处理所有消息块后提交其偏移,以确保准确跟踪消息交付并防止重新平衡期间发生重复。块可能会在不同的网段之间分布。消费者处理应该覆盖在随后删除片段时块不可用的可能性。
图 7.1. 内联消息传递流
内联消息传递在消费者端具有性能开销,因为需要缓冲,特别是在并行处理一系列大型消息时。大型消息的块可能会变为交集,因此如果缓冲区中另一个大消息的块不完整,则无法提交消息的所有区块。因此,通常通过持久保留消息块或实施提交逻辑来支持缓冲。