引子
如果broker端配置auto.create.topics.enable为true(默认为true),当收到客户端的元数据请求时则会创建topic。
向一个不存在的主题发送和消费都会创建一个新的主题,很多时候,非预期的创建主题,会导致很多意想不到的问题,建议关掉该特性。
创建
创建主题的更加推荐采用脚本的方式,位置为:
./bin/kafka-topics.sh
# 下面是通过命令指定分区数和副本数
./kafka-topics.sh --zookeeper localhost:2181 --create --topic testTopic --partitions 1 --replication-factor 1
PS: 创建topic时,分区数为num.partitions(默认1),副本因子为default.replication.factor
其中日志路径下查看broker的分配信息,也可以在ZooKeeper中获取分配信息:
[zk: localhost:2181(CONNECTED) 3] get /brokers/topics/testTopic-1
{"version":1,"partitions":{"0":[0]}}
cZxid = 0xd3
ctime = Sat Jul 20 09:57:21 CST 2019
mZxid = 0xd3
mtime = Sat Jul 20 09:57:21 CST 2019
pZxid = 0xd4
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 36
numChildren = 1
afka-topics.sh可以执行多种类型的topic操作,包括create、delete、alter、list、describe。
修改
# create 新增主题
./kafka-topics.sh --zookeeper localhost:2181 --create --topic testTopic --partitions 1 --replication-factor 1
# 删除主题
./kafka-topics.sh --zookeeper localhost:2181 --delete --topic testTopic-2
Topic testTopic-2 is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
自重删除不是立刻删除,而且delete.topic.enable为false的时候,删除操作是没有作用的。
查看
查看主题详情:展示主题,分区数,副本数(AR),Leader副本所在broker,ISR等信息
./kafka-topics.sh --zookeeper localhost:2181 --describe --topic testTopic
Topic:testTopic PartitionCount:1 ReplicationFactor:1 Configs:
Topic: testTopic Partition: 0 Leader: 0 Replicas: 0 Isr: 0
如果没有指定--topic则会展示全部主题信息
代码
有相应的Java API对应kafka-topics.sh脚本实现的功能。
public class CreateTopic {
public static final String BROKER_LIST = "192.168.13.53:2181";
public static void main(String[] args) {
String[] options = new String[]{
"--zookeeper", BROKER_LIST,
"--create",
"--replication-factor", "1",
"--partitions", "1",
"--topic", "topic-1"
};
TopicCommand.main(options);
}
}
网友评论