kafka发送的每条消息都会被指定一个分区,改分区就是消息所属的topic的分区。现在我们来看一下kafka消息的分区策略是什么样的。
下图描述了kafka发送消息时计算消息分区的过程
- 如果消息在创建时就被指定了分区,那么直接会选择该分区。具体流程入下图
- 如果消息没有指定分区,但是客户端有自定义分区策略那么直接会使用自定义的分区器来计算分区
- 如果消息没有指定分区并且客户端没有自定义分区器,那么会使用kafka默认的分区策略。它的逻辑是: 如果消息key为null,那么使用轮询策略,否则计算key的hash值来决定消息的分区。
- 可以实现Partitioner接口来实现自定义的分区器,当然需要在初始化producer的时候注册自定义的分区器。