动态管理kafka主题

动态修改卡夫卡消息主题

卡夫卡为我们提供一系列的方法来对主,及分区,副本进行管理;
引入如下依赖

	<dependency>
		<groupId>org.apache.kafka</groupId>
		<artifactId>kafka-clients</artifactId>
		<version>0.10.2.1</version>
	</dependency>

  <dependency>
           <groupId>org.apache.kafka</groupId>
           <artifactId>kafka_2.10</artifactId>
            <version>0.10.0.1</version>
    </dependency>
public class Test {

	public static void main(String[] args) {
		//createTopic();//创建主题
		reallocateReplica("localhost:2181","kfk_test", 2, 3);//zk,主题,分区
		//deT();//删除主题
	}
	
	
    public static void createTopic() {
        ZkUtils zkUtils = null;
        String  TOPIC_NAME="Mytest1";
        try {
            // 参数从左到右,zk的IP端口,会话超时时间,连接超时时间,zk安全验证是否开启
            zkUtils = ZkUtils.apply("localhost:2181", 
            		30000, 30000, JaasUtils.isZkSecurityEnabled());
            if (!AdminUtils.topicExists(zkUtils, TOPIC_NAME)) {
                AdminUtils.createTopic(zkUtils, TOPIC_NAME, 1, 2, new Properties(), new RackAwareMode.Enforced$());
            } else {
                // TODO 主题存在
            	System.out.println("jkdscjk");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            zkUtils.close();
        }
    }
    
    public static void deT() {
    	ZkUtils zkUtils = ZkUtils.apply("localhost:2181", 300000, 300000, JaasUtils.isZkSecurityEnabled());
    	// 删除topic 't1'
    	AdminUtils.deleteTopic(zkUtils, "Mytest");
    	zkUtils.close();
    }
    
    /**
     * 分区副本重分配
     * @param topic
     * @param numTotalPartitions 重分区后的分区数
     * @param numReplicasPerPartition 重分区后每个分区的副本数
     */
    public static void reallocateReplica(String zk,String topic, int numTotalPartitions, int numReplicasPerPartition) {
        ZkUtils zkUtils =  ZkUtils.apply(zk, 30000, 30000, JaasUtils.isZkSecurityEnabled());
        try {
            // 获取broker原数据信息
            scala.collection.Seq<BrokerMetadata> brokerMetadata = AdminUtils.getBrokerMetadatas(zkUtils,
                    AdminUtils.getBrokerMetadatas$default$2(),
                    AdminUtils.getBrokerMetadatas$default$3());
            // 生成新的分区副本分配方案
            scala.collection.Map<Object, Seq<Object>> replicaAssign = AdminUtils.assignReplicasToBrokers(brokerMetadata,
                    numTotalPartitions, // 分区数
                    numReplicasPerPartition, // 每个分区的副本数
                    AdminUtils.assignReplicasToBrokers$default$4(),
                    AdminUtils.assignReplicasToBrokers$default$5());
            // 修改分区副本分配方案
            AdminUtils.createOrUpdateTopicPartitionAssignmentPathInZK(zkUtils,
                    topic,
                    replicaAssign,
                    null,
                    true);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            zkUtils.close();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值