KAFKA分区选择策略

ggr 2020年02月09日 2次浏览

kafka producer 发送消息的时候,可以指定 key,这个 key 的作用是为消息选择存储分区

  • 当指定 key 且不为空的时候,kafka 是根据 key 的 hash 值与分区数取模来决定数据存储到那个分区

  • 当 key=null 时,kafka 是先从缓存中取分区号,然后判断缓存的值是否为空,如果不为空,就将消息存到这个分区,否则重新计算要存储的分区,并将分区号缓存起来,供下次使用

  • kafka 定义了一 个全局变量, 这个变量值是配置参数中的topic.metadata.refresh.interval.ms 设置的值,也就是说在这个时间内,key=null 的消息都会往缓存起来的这个分区存储,当时缓存过时之后,就会重新计算分区号,将计算结果缓存起来。也就是说在key为null的情况下,Kafka并不是每条消息都随机选择一Partition;而是每隔 topic.metadata.refresh.interval.ms 才会随机选择一次!