本文内容主要是说明kafka如何保证消息的有序性?首先我们需要先回顾若干个重要的概念
-
kafka生产者缓冲区包含若干个缓冲队列,每一个缓冲队列对应kafka服务端的一个主题的一个分区。
-
缓冲队列的数据结构是Deque,是一个双端队列,一端放入数据,一端取出数据。
其实看了上面的这个图,kafka如何保证消息的有序性就呼之欲出了
-
在生产者中的双端缓冲队列中,消息是可以保证顺序的,一端进一端出。
-
每一个双端队列对应kafka服务端的一个主题的分区,所以kafka是可以保证消息数据在一个分区内的有序性。
如果我们希望消息是有序被发送的并且是有序被处理的,需要满足以下场景中的一个:
-
某个主题只有一个分区,那么这个主题的所有数据"发送"和“消费”都是有序的。这种方式应用场景比较窄,针对数据量比较小的主题可以考虑创建主题时只包含一个分区。
-
某个主题有多个分区
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习