使用Kafka生产和消费消息, 肯定希望能够将数据均匀地分配到所有服务器上.
今天来分析Kafka生产者如何实现这个需求.
为什么分区
Kafka的消息组织方式实际上是三级结构: 主题-分区-消息.
Kafka为什么使用分区的概念, 而不是直接使用多个主题呢?
分区的作用就是提供负载均衡能力. 对数据进行分区的主要原因就是为了实现系统的高伸缩性. 不同的分区能够被放置到不同节点的机器上, 而数据的读写操作也都是针对分区这个粒度进行的.
除了提供负载均衡这种最核心的功能之外, 利用分区也可以实现其他一些业务级的需求, 比如实现业务级别的消息顺序的问题.
有哪些分区策略?
所谓分区策略, 就是决定生产者将消息发送到哪个分区的算法.Kafka提供了默认的分区策略, 同时它也支持你自定义分区策略.
如果要自定义分区策略, 你需要显示地配置生产者端的参数partitioner.class. 这个参数的设定方式, 就是在编写生产者程序时, 可以编写一个具体的类实现 org.apache.kafka.clients.producer.Partitioner接口.
轮询策略
也称Round-robin策略, 即顺序分配. 也是Kafka Java生产者默认提供的分区策略.
轮询策略有非常优秀的负载均衡表现, 它总是能保证消息最大限度地被平均奉陪到所有分区上, 默认情况下它是最合理的分区策略, 也是最常用的分区策略之一.
随机策略
也称Randomness策略.
如果追求数据的均匀分布, 还是使用轮询策略比较好.
按消息键保序策略
也称Key-ordering策略.
Kafka允许为每条消息定义消息键, 它可以是一个有着明确业务含义的字符串. 一旦消息被定义了Key, 那么你就可以保证同一个Key的所有消息都进入到相同的分区里面, 由于每个分区下的消息处理都是有顺序的, 故这个策略被称为按消息键保序策略.
其他分区策略
根据IP地址...
结语
讨论了Kafka生产者消息分区的机制以及常见的几种分区策略. 分区是实现负载均衡以及高吞吐量的关键.
此文章为3月Day16学习笔记, 内容来源于极客时间《kafka核心技术与实战》, 强烈推荐该课