保证 Kafka 消息顺序性是分布式系统中常见且重要的问题。要回答这个问题,首先需要明确一个核心原则: Kafka 只能保证在同一个分区(Partition)内的消息是有序的,而不能保证整个 Topic(跨分区)的全局有序性。 基于这个原则,我们需要从 发送端(Producer)、服务端(Broker) 和 消费端(Consumer) 三个环节来共同保证顺序。 --- 1. 发送端(Producer):确保消息进入同一分区 如果业务要求消息 A 必须在消息 B 之前处理(例如:先创建订单,再支付订单),那么这两条消息必须被发送到同一个 Partition 中。 使用 Key 进行路由: 在发送消息时,必须指定相同的 (例如订单 ID)。 Kafka 的默认分区策略是 。这样,具有相同 Key 的消息会被路由到同一个分区,从而保证了存储的顺序。 不使用 Key 的后果: 如果不指定 Key,Producer 会使用轮询(Round-Robin)或粘性分区策略,导致相关联的消息分散在不同分区,无法保证顺序。 关于网络重试导致的乱序(重要配置) 即使发送到了同一个分区,如果网络出现波动...