实际场景
在创建kafka的topic时,一般会指定partition以及其副本数,kafka会自动将这些partiton分配到不同的broker上。但是有时候想对每个topic使用的机器进行物理隔离,也就是说,某个topic只能使用kafka集群中的某些broker机器。这样就把每个topic需要的资源从broker级别进行了隔离。
实现方式
在创建topic的时候可以指定replica-assignment
参数。本文基于HDP 2.5.0.0-1245版本。
-
查看每个broker的id,登录zk在
/brokers/ids
中记录了所有broker的id,通过get命令,例如get /brokers/ids/1008
可以知道id对应的host -
创建topic的时候加上
replica-assignment
参数,后面的值用逗号分隔每个partition,每个partition中冒号分隔副本所在的broker。例如通过下面的命令创建一个topic。
./kafka-topics.sh --zookeeper hostA:2181 --create --topic xt0 --replica-assignment 1008:1001,1007:1002
- 参看创建之后的partition分布,partition0的leader是1008,副本在1008和1001,partition1也是和预期的一致。
./kafka-topics.sh --describe --zookeeper hostA:2181 --topic xt0
Topic:xt0 PartitionCount:2 ReplicationFactor:2 Configs:
Topic: xt0 Partition: 0 Leader: 1008 Replicas: 1008,1001 Isr: 1008,1001
Topic: xt0 Partition: 1 Leader: 1007 Replicas: 1007,1002 Isr: 1007,1002
网友评论