消息中间件篇之Kafka-消费顺序性

时间:2024-02-29 14:25:16

一、应用场景

        1. 即时消息中的单对单聊天和群聊,保证发送方消息发送顺序与接收方的顺序一致。

        2. 充值转账两个渠道在同一个时间进行余额变更,短信通知必须要有顺序。

二、解决方案

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

三、面试题

面试官:Kafka是如何保证消费的顺序性?

候选人

kafka默认存储和消费消息,是不能保证顺序性的,因为一个topic数据可能存储在不同的分区中,每个分区都有一个按照顺序的存储的偏移量,如果消费者关联了多个分区不能保证顺序性。

如果有这样的需求的话,我们是可以解决的,把消息都存储同一个分区下就行了,有两种方式都可以进行设置,第一个是发送消息时指定分区号,第二个是发送消息时按照相同的业务设置相同的key,因为默认情况下分区也是通过key的hashcode值来选择分区的,hash值如果一样的话,分区肯定也是一样的。