学习极客时间 《Kafka核心技术与实战》笔记-客户端实践及原理剖析09-11
作者 胡夕,Apache Kafka 的一名代码贡献者,目前在社区的 Patch 提交总数位列第 22 位,应该说算是国内比较活跃的贡献者了。
https://time.geekbang.org/column/intro/191?utm_campaign=guanwang&utm_source=baidu-ad&utm_medium=ppzq-pc&utm_content=title&utm_term=baidu-ad-ppzq-title
胡夕老师 赠言: 聪明人也要下死功夫 。
生产者消息分区机制原理剖析
Kafka消息的组织方式是三级结构:主题-分区-消息。
其中分区是Kafka实现负载均衡、高吞吐量的一个核心因素。官网如图展示:
不同的分区能够放置到不同节点的机器上,数据的读写操作也是针对分区这个细粒度进行,这样每个节点的机器都能独立的执行各自分区的读写请求,故通过添加新的节点机器,可增加整体系统的吞吐量,实现系统的高伸缩性、负载均衡等能力。
分区策略
Kafka分区策略如下:
-
** 轮询策略**
按照分区数量进行轮询投放消息,每个分区会被按照顺序投放消息,为Kafka默认 分区策略。如下图所示:
轮序策略是大家最容易想到的负载均衡方法,同时也是负载均衡表现非常优秀的方法。 -
** 随机策略**
随机策略,顾名思义就是在多个分区中通过随机选择的方式将消息投放进去,如下图所示。随机策略是老版本Kafka默认分区策略,从其实际表现上要逊于轮询方式。
如果需要实现随机策略partition 方法,代码如下:
List<PartitionInfo> partitions = cluster.partitionsForTopic(topic);
return ThreadLocalRandom.current