本文主要是介绍kafka新版本的一个特性:黏性分区策略(StickyPartitioning Strategy),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
黏性分区策略(StickyPartitioning Strategy)
0.10之后的kafka版本实现了黏性分区策略(StickyPartitioning Strategy)来实现生产者发送数据分区优化。
kafkaproducer发送数据并不是一个一个消息发送,而是取决于两个producer端参数。一个是linger.ms
,默认是0ms,当达到这个时间后,kafkaproducer就会立刻向broker发送数据。另一个参数是batch.size
,默认是16kb,当产生的消息数达到这个大小后,就会立即向broker发送数据。
按照这个设计,从直观上思考,肯定是希望每次都尽可能填满一个batch再发送到一个分区。
但实际决定batch如何形成的一个因素是分区策略(partitionerstrategy)。
在Kafka2.4版本之前,在producer发送数据默认的分区策略是轮询策略(没指定keyd的情况。如果多条消息不是被发送到相同的分区,它们就不能被放入到一个batch中。
所以如果使用默认的轮询partition策略,可能会造成一个大的batch被轮询成多个小的batch的情况。鉴于此,kafka2.4的时候推出一种新的分区策略,即StickyPartitioning Strategy,StickyPartitioning Strategy会随机地选择另一个分区并会尽可能地坚持使用该分区——即所谓的粘住这个分区。
鉴于小batch可能导致延时增加,之前对于无Key消息的分区策略效率很低。社区于2.4版本引入了黏性分区策略(StickyPartitioning Strategy)。该策略是一种全新的策略,能够显著地降低给消息指定分区过程中的延时。使用StickyPartitioner有助于改进消息批处理,减少延迟,并减少broker的负载。
kafka低版本
低版本轮询数据
kafka高版本
高版本轮询数据
参考:https://baijiahao.baidu.com/s?id=1709319051451705303&wfr=spider&for=pc
这篇关于kafka新版本的一个特性:黏性分区策略(StickyPartitioning Strategy)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!