Kafka通过分区(Partition)机制和生产者/消费者配置实现消息顺序处理,核心逻辑如下:
hash(key) % partitionNum),确保同类消息进入同一分区。max.in.flight.requests.per.connection=1:禁止并行发送未确认消息,避免乱序。enable.idempotence=true:启用幂等性,防止重试导致重复消息。acks=all:确保所有副本确认写入,保障消息不丢失。// 使用订单ID作为Key,保证同类消息进入同一分区
ProducerRecord<String, String> record = new ProducerRecord<>("orders", "order-123", "支付成功");
producer.send(record);
// 单线程消费,按分区顺序处理
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records) {
process(record); // 顺序处理
}
consumer.commitSync(); // 同步提交偏移量
}
总结:Kafka通过分区隔离+顺序写入+消费者独占实现高效有序处理,业务可根据需求选择“单分区全局有序”或“分区内局部有序”方案。