主题管理
创建主题
使用命令:
./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic mytopic1 --partition 2 --replication-factor 1
# --replication-factor 用于设置主题副本数,每个副本分布在不同节点,不能超过总节点数。
查看主题
# 查看所有主题
./kafka-topics.sh --list --bootstrap-server localhost:9092
# 查看某个特定主题信息
./kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic mytopic1
删除主题
如果delete.topic.enable=true,直接彻底删除该topic。
如果delete.topic.enable=false,如果topic没有使用过即没有传输过信息,可以彻底删除;如果当前topic有使用过即有过传输信息,并没有真正删除topic只是把这个topic标记为删除,重启Kafka server后删除。
./kafka-topics.sh --delete --bootstrap-server localhost:9092 --topic mytopic1
修改主题
# 增加配置
./kafka-topics.sh --alter --bootstrap-server localhost:9092 --topic mytopic1 --config flush.messages=1
# 删除配置
./kafka-topics.sh --alter --bootstrap-server localhost:9092 --topic mytopic1 --delete-config flush.messages
增加分区
# 修改分区时,只能增加,不能减少
./kafka-topics.sh --alter --bootstrap-server localhost:9092 --topic mytopic1 --partitions 3
KafkaAdminClient
除了使用Kafka的bin目录下的脚本工具来管理kafka,有些时候需要将某些管理查看的功能集成到系统,那么就需要调用一些API来操作Kafka。
public static void addTopicPartitions() throw ExecutionException,InterruptedException {
String brokerList = "127.0.0.1:9092";
String topic = "mytopic1";
Properties props = new Properties();
props.put(AdminClientConfig,BOOTSTRAP_SERVERS_CONFIG,brokerList);
props.put(AdminClientConfig,REQUEST_TIMEOUT_MS_CONFIG,30000);
AdminClient client = AdminClient.create(props);
NewPartitions newPartitions = NewPartitions.increaseTo(3);
Map<String,NewPartitions> newPartitionsMap = new HashMap<>();
newPartitionsMap.put(topic,newPartitions);
CreatePartitionsResult result = client.createPartitions(newPartitionsMap);
result.all().get();
client.close();
}