Kafka分区机制原理

kafka消息组织结构:
主题-分区-消息

一、为什么分区?

  • 提供负载均衡、动态伸缩的能力
  • 支持局部消息顺序消费

二、分区策略

  • 默认分区策略

    • 轮询(Round-robin)是javaProducerAPI默认策略

    • 随机(Randomness)

    • 按消息键保存。自定义每条消息的消息键,消息键代表业务类型,使相同类型的业务放到同一个partition。因为一个分区只能针对同一个消费者,那么该消费者的消息就是有序的。

      1
      2
      3
      4
      5
      6
      7
      8
      
         #按key类型划分
         List<PartitionInfo> partitions = cluster.partitionsForTopic(topic);
         List<PartitionInfo> partitions = cluster.partitionsForTopic(topic);
           return Math.abs(key.hashCode()) % partitions.size();
           
      #按地区分区,同理可以按Ip地域划分partition。
         List<PartitionInfo> partitions = cluster.partitionsForTopic(topic);
         return partitions.stream().filter(p -> isSouth(p.leader().host())).map(PartitionInfo::partition).findAny().get();
      
  • 自定义分区策略

    需要实现org.apache.kafka.clients.producer.Partitioner接口,设置并设置partitioner.class值为该实现类全路径类名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值