[kafka]kafka如何保证消息有序

严格的说,kafka只能保证同一个分区内的消息存储的有序性。

这个问题并没有标准答案,面试官只是想看看你如何思考的。

1、kafka怎么保证消息的消费顺序。可以,但是代价太大了。

kafka只能保证单partition有序,如果kafka要保证多个partition有序,不仅broker保存的数据要保持顺序,消费时也要按序消费。假设partition1堵了,为了有序,那partition2以及后续的分区也不能被消费,这种情况下,kafka就退化成了单一队列,毫无并发性可言,极大降低系统性能。

因此kafka使用多partition的概念,并且只保证单partition有序。这样不同partition之间不会被干扰。

2、kafka保证消息顺序有2种方法

1)全局消费顺序:设置一个partition

2)局部消费顺序:多个partition局部有序

生产时:producer在把消息发送到partition的时候,当key非空时,用key的hash值对partition个数取模,决定要把消息发送到哪个partition上,可以指定一样的key,这样这个key的消息在单个partition内是有序的。

注:当key为空时,消息随机发送到各个分区。规则再各个版本会有不同,有的是采用轮询方式,有的随机,有的是一定时间内发送给固定的partition,隔一段时间后随机换一个。

消费时:在一个消费者组中的多个消费者消费一个topic时,一个消费这组中只能有一个消费者消费该消息,topic下的每个分区只属于组中的一个消费者,因此是有序的。

相关推荐
LuckyRich18 分钟前
【RabbitMq C++】消息队列组件
c++·分布式·rabbitmq
IvanCodes8 小时前
五、Hadoop集群部署:从零搭建三节点Hadoop环境(保姆级教程)
大数据·hadoop·分布式
Panesle10 小时前
分布式异步强化学习框架训练32B大模型:INTELLECT-2
人工智能·分布式·深度学习·算法·大模型
计算机毕设定制辅导-无忧学长11 小时前
RabbitMQ 核心概念与消息模型深度解析(一)
分布式·rabbitmq
Cxzzzzzzzzzz13 小时前
Kafka Go客户端--Sarama
中间件·golang·kafka·linq
信徒_15 小时前
Kafka topic 中的 partition 数据倾斜问题
分布式·kafka
Paraverse_徐志斌15 小时前
Kafka 如何保证消息顺序性
分布式·中间件·kafka·消息队列
杨不易呀15 小时前
Java面试全记录:Spring Cloud+Kafka+Redis实战解析
redis·spring cloud·微服务·kafka·高并发·java面试·面试技巧
我叫珂蛋儿吖16 小时前
[redis进阶六]详解redis作为缓存&&分布式锁
运维·c语言·数据库·c++·redis·分布式·缓存