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