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 分区数据太少,发生了数据倾斜

    解决办法

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

  • 相关阅读:
    在CentOS 6上安装Apache和PHP
    花10分钟看一看,少走30年的弯路
    IOS开发之UITabBarController与UINavigationController混合使用
    重构tableview!
    初学IOS之TableView
    关于mac下配置mysql心得
    类,对象,方法的
    shell脚本
    关于我
    机器学习&深度学习视频资料汇总
  • 原文地址:https://www.cnblogs.com/zzzsw0412/p/12772446.html
Copyright © 2011-2022 走看看