Kafka 原理——生产者分区写入策略


一、生产者分区写入策略

Producer 发送消息到 Topic 时,会根据不同的策略将数据分配到不同的 Partition 中

1.1 分区策略

1.1.1 指定分区(与写入策略无关)

若 Producer 在发送消息时指定了 Partition,就直接发送到这个 Partition,与分区策略无关

1.1.2 轮询策略

若没有指定 Partition 和 Key,就使用轮询策略

1.1.3 按 key 分配策略

若没有指定 Partition,但是指定了 key,就按照 key 的 hash 值选择 Partition

1.1.4 随机策略

每次都是随机的将消息分配到每个分区,在较早的版本中是默认的分区策略

1.1.5 自定义分区策略

如果对提供的分区策略都不满意,那么可以自定义分区策略,相关步骤如下
1、实现org.apache.kafka.clients.producer.Partitioner接口
2、在 Kafka 生产者配置中,配置自定义分区器的类名

public interface Partitioner extends Configurable, Closeable {

    /**
     * 主要功能:计算分区号
     * @param topic      主题
     * @param key        键
     * @param keyBytes   序列化后的键
     * @param value      值
     * @param valueBytes 序列化后的值
     * @param cluster    集群的元数据信息
     * @return Kafka 的分区号
     */
    public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster);

    /**
     * 主要功能:在关闭分区器的时候用来回收一些资源
     */
    public void close();
}

二、 消息乱序问题

  • 轮询策略和随机策略,造成Kafka 中的数据是乱序存储的
  • 按 key 分区,一定程度上可以实现数据的有序存储——局部有序,但是又可能会造成数据倾斜
    在这里插入图片描述

参考

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值