7.kafka分区

分区策略

构造KafkaProducer代码如下:

属性partitioner.class就是决定消息如何分区的,默认实现类是DefaultPartitioner,源码注释如下:

源码分析

在调用send()方法发送消息时,会调用如下代码选择分区:

partition()方法源码如下:

DefaultPartitioner即默认分区选取策略的源码如下:

通过设置相同key来保证消息有序性,这里可能还会有一点小小的缺陷。例如消息发送设置了重试机制,并且异步发送,消息A和B设置相同的key,业务上A先发,B后发。由于网络或者其他原因A发送失败,B发送成功;A由于发送失败就会重试且重试成功,这时候消息顺序B在前A在后,与业务发送顺序不一致。如果需要解决这个问题,需要设置参数,其含义是限制客户端在单个连接上能够发送的未响应请求的个数。设置此值是1表示kafka broker在响应请求之前client不能再向同一个broker发送请求,这个参数默认值是5。官方文档说明如下,这个参数如果大于1,由于重试消息顺序可能重排:

自定义

KafkaCustomPartitioner就是自定义实现类,假定分区策略如下:

分区实现的核心源码如下:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180802G00HVB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券