一、顺序消费
Kafka是如何消费消息的
- Kafka消费线程模型:https://juejin.cn/post/6906843890607718407
Kafka的topic、partition、consumer的关系
-
topic:partition - 1:n【Kafka中一个topic对应多个partition】
-
partition:consumer - n:1【一个partition只能被一个consumer消费,一个consumer可以消费多个partition,consumer采用的是单线程拉取消息,每次默认拉取500条到本地,保证消息的有序性,但是单线程导致消息的吞吐量较低】
如何保证消息有序
- 如何确保消息有序性:https://juejin.cn/post/6962323755959844894
消息有序由以下两方面控制:
- 生产者发送的消息有序
- Kafka分配到partition的消息有序:通过partitionKey进行分配
- 消费者消费有序:Kafka的partition由同个consumer消费,并且consumer默认采用单线程进行消息拉取和消息,所以本质上是有序的
如何保证有序的同时提高消息吞吐
Kafka consumer默认采用单线程进行消息处理,如果对消息吞吐有更高的要求,可以在接收到消息后再根据业务需要再次进行哈希分组,将同个partition中的消息进行分组,并采用多线程分别对每个分组进行消息,这样可以提高消息的消费速度。