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

先给大家介绍一下生产者的大概的运行的流程 。 图2 Kafka运行方式 如上图所示: 步骤一 : 一条消息过来首先会被封装成为一个 ProducerRecord 对象 。 步骤二 : 接下来要对这个对象进行序列化 , 因为 Kafka 的消息需要从客户端传到服务端 , 涉及到网络传输 , 所以需要实现序列 。 Kafka 提供了 默认 的序列化机制 , 也支持 自定义 序列化(这种设计也值得我们积累 , 提高项目的扩展性) 。 步骤三 : 消息序列化完了以后 , 对消息要进行分区 , 分区的时候需要获取集群的元数据 。 分区的这个过程很关键 , 因为这个时候就决定了 , 我们的这条消息会被发送到 Kafka 服务端到哪个主题的哪个分区了 。 步骤四 : 分好区的消息不是直接被发送到服务端 , 而是放入了生产者的一个缓存里面 。 在这个缓存里面 , 多条消息会被封装成为一个批次(batch) , 默认一个批次的大小是 16K 。 步骤五 : Sender 线程启动以后会从缓存里面去获取可以发送的批次 。 步骤六 : Sender 线程把一个一个批次发送到服务端 。 大家要注意这个设计 , 在 Kafka0.8 版本以前 , Kafka 生产者的设计是来一条数据 , 就往服务端发送一条数据 , 频繁的发生网络请求 , 结果性能很差 。 后面的版本再次架构演进的时候把这儿改成了批处理的方式 , 性能指数级的提升 , 这个设计值得我们积累 。 生产者细节深度剖析

推荐阅读