Kafka 的生产者优秀架构设计( 四 )

接下来我们生产者这儿技术含量比较高的一个地方 , 前面概述那儿我们看到 , 一个消息被分区以后 , 消息就会被放到一个缓存里面 , 我们看一下里面具体的细节 。 默认缓存块的大小是 32M , 这个缓存块里面有一个重要的数据结构:batches , 这个数据结构是 key-value 的结果 , key 就是消息主题的分区 , value 是一个队列 , 里面存的是发送到对应分区的批次 , Sender 线程就是把这些批次发送到服务端 。 图3生产者架构 01 生产者高级设计之自定义数据结构 生产者把批次信息用 batches 这个对象进行存储 。 如果是大家 , 大家会考虑用什么数据结构去存储批次信息? Kafka 这儿采取的方式是自定义了一个数据结构: CopyOnWriteMap 。 熟悉 Java 的同学都知道 , JUC 下面是有一个 CopyOnWriteArrayList 的数据结构的 , 但是没有 CopyOnWriteMap , 我这儿给大家解释一下 Kafka 为什么要设计这样的一个数据结构 。

1

他们存储的信息的是 key-value 的结构 , key 是分区 , value 是要存到这个分区的对应批次(批次可能有多个 , 所以用的是队列) , 故因为是 key-value 的数据结构 , 所以锁定用 Map 数据结构 。

推荐阅读