zoukankan      html  css  js  c++  java
  • 【Kafka】数据分区策略

    数据分区策略


    四种策略

    一、指定分区号,数据会直接发送到所指定的分区
    二、没有指定分区号,指定了数据的key,可以通过key获取hashCode决定数据发送到哪个分区
    三、都没有指定的话,会采取round-robin fashion,是kafka的轮询策略
    四、还可以自定义分区策略

    四种策略的Java实现

    其他的代码都不需要变,只需要更改ProducerRecord()里面的值即可

    //既不指定分区号也不指定数据的key
    producer.send(new ProducerRecord<String, String>("test", "这是第" + i + "条message"));
    
    //指定数据的key,通过key获取hashCode
    //如果使用key作为分区依据,一定要让它是变化着的,否则就会将全部数据发送到一个分区
    producer.send(new ProducerRecord<String, String>("test", "mykey"+i , "这是第" + i + "条message"));
    
    //指定分区号
    //指定分区号时也必须指定key
    producer.send(new ProducerRecord<String, String>("test", 0,"mykey","这是第" + i + "条message"));
    

    自定义分区策略见文章:【Kafka】自定义分区策略


    举例

    现在有一个Topic,一共有5个分区,因为操作不当,导致 0,1,2 三个分区数据太多,3,4 分区数据太少,发生了数据倾斜

    解决办法

    可以用第一种策略指定分区号,也可以用第四种策略,自定义分区策略

  • 相关阅读:
    三者最大实例分析
    Python eval函数
    Linux查看某个进程的线程
    将列表传递给函数
    二十四、二进制日志截取与恢复
    二十三、二进制日志事件
    二十二、二进制日志记录方式
    二十一、二进制日志介绍
    二十、错误日志
    十九、InnoDB核心参数
  • 原文地址:https://www.cnblogs.com/zzzsw0412/p/12772446.html
Copyright © 2011-2022 走看看