📚 分类
kafka
🕵🏽‍♀️ 问题描述
kafka是如何保证消费的顺序性
👨‍🏫 问题讲解
❒ 应用场景

✔ 即时消息中的单对单聊天和群聊,保证发送方消息发送顺序与接收方的顺序一致
✔ 充值转账两个渠道在同一个时间进行余额变更,短信通知必须要有顺序

❒ 原理
✔ topic分区中消息只能由消费者组中的唯一一个消费者处理,所以消息肯定是按照先后顺序进行处理的。
✔ 但是它也仅仅是保证topic的一个分区顺序处理,不能保证跨分区的消息先后处理顺序。
✔ 所以,如果你想要顺序的处理topic的所有消息,那就只提供一个分区。

// 指定分区
kafkaTemplate.send(topic: "springboot-kafka-topic", partition: 0, "key-001" data:"value-0001");

// 相同的业务key
KafkaTemplate.send(topic: "springboot-kafka-topic", key:"key-001", data:"value-0001");
🏳️‍🌈 问题总结
❒ 问题原因:

✔ 一个topic的数据可能存储在不同的分区中,每个分区都有一个按照顺序的存储的偏移量,如果消费者关联了多个分区不能保证顺序性

❒ 解决方案:

✔ 发送消息时指定分区号
✔ 发送消息时按照相同的业务设置相同的key
📖 问题信息
📈 浏览次数:10 | 📅 更新时间:2025-12-01 22:01:52
📦 创建信息
🏷️ ID:74 | 📅 创建时间:2024-12-03 09:03:04