文章目录
管理主题
创建主题
在Kafka系统中有两种方式来创建主题,自动创建和手动创建。
自动创建
可以通过auto.create.topics.enable
属性来自动创建主题。默认情况下,该属性值为true。声场这应用程序向Kafka急群众一个不存在的主题写数据时,会自动创建一个默认分区和默认副本系数的主题。
- 默认分区的数值由
$KAFKA_HOME/config/server.properties
文件中的属性num.partitions
控制。 - 默认副本系数的值由
$KAFKA_HOME/config/server.properties
文件中的属性default.replication.factor
控制。
手动创建
可以通过kafka-topics.sh
脚本手动创建主题。
创建主题
kafka-topics.sh --create --zookeeper zoo1:2181,zoo2:2181,zoo3:2181 --replication-factor 2 --partitions 3 --topic kafka-action
- **zookeeper:**必传参数,用于配置Kafka集群与Zookeeper连接地址,多个配置之间用
,
分割。 - **partitions:**设置主题分区,必传参数,Kafka通过分区分配策略,将一个主题的消息分散到多个分区并分别保存到不同的代理上。
- **replication-factor:**设置主题副本数,必传参数,副本会被分布在不同的节点上,副本数不能超过节点数,否则创建主题失败。
创建主题时,可以通过config参数来设置主题级别的配置覆盖默认配置,可以设置多组配置。#
# 设置该主题的max.message.bytes为404800字节
kafka-topics.sh --create --zookeeper zoo1:2181,zoo2:2181,zoo3:2181 --replication-factor 2 --partitions 3 --config max.message.bytes=404800 --topic kafka-test
查看主题
Kafka系统中的kafka-topics.sh
脚本提供连个查看主题信息的命令。
- **describe命令:**用来查看指定主题或全部主题的信息。
- **list命令:**用来列出所有主题名。
查看所有主题
kafka-topics.sh --list --zookeeper zoo1:2181,zoo2:2181,zoo3:2181
查看特定主题信息
当执行describe命令时,指定topic参数则查看特定主题信息,若不指定topic参数则查看所有主题信息。
kafka-topics.sh --describe --zookeeper zoo1:2181,zoo2:2181,zoo3:2181
查看正在同步的主题
通过describe
与under-replicated-partitions
命令组合受用,可以查看处于under replicated
状态的分区。处于该状态的主题可能正在进行同步操作,也可能同步发生异常,所有查询到的主题分区的ISR列表长度小于AR列表长度。
kafka-topics.sh --describe --zookeeper zoo1:2181,zoo2:2181,zoo3:2181 --under-replicated-partitions
查看没有Leader的分区
通过describe
与unavailable-partitions
命令组合使用,可以查看没有Leader副本的主题。
kafka-topics.sh --describe --zookeeper zoo1:2181,zoo2:2181,zoo3:2181 --unavailable-partitions
查看主题覆盖配置
通过describe
与topics-with-overrides
命令组合使用,可以查看主题覆盖了哪些配置。组合使用与只有describe命令的区别在于:topic-with-overrides
命令只显示descibe命令执行的第一行信息。
kafka-topics.sh --describe --zookeeper zoo1:2181,zoo2:2181,zoo3:2181--topics-with-overrides
修改主题
当创建一个主题后,可以通过alter命令对主题进行修改,包括主题级别的配置、增加主题分区、修改副本分配方案、修改主题Offset。
修改主题级别配置
在创建主题时,可以通过config参数覆盖主题级别的默认配置,当主题创建后可以通过alter与config参数组合使用,修改或增加新的配置可以覆盖响应配置原来的值,或者通过alter与delete-config参数组合使用删除响应配置设置使其恢复默认值。
#修改配置
kafka-topics.sh --alter --zookeeper zoo1:2181,zoo2:2181,zoo3:2181 --topic config-test --config max.message.bytes=204800
#删除配置
kafka-topics.sh --alter --zookeeper zoo1:2181,zoo2:2181,zoo3:2181 --topic config-test --delete-config max.message.bytes
增加分区
Kafka不支持减少分区的操作,只能为一个主题增加分区。
kafka-topics.sh --alter --zookeeper zoo1:2181,zoo2:2181,zoo3:2181 --topic config-test --partitions 5
删除主题
Kafka系统中,删除主题有两种方式。
- 手动删除各节点${log.dir}目录下该主题分区文件夹,同事登录Zookeeper客户端删除待删除主题对应的节点,主题元数据保存在/brokers/topics和/config/topics沐浴露下
- 执行kafka-topics.sh脚本进行删除,若希望通过该脚本彻底删除主题,则需要保证在启动Kafka时所加载的server.properties文件中配置
delete.topic.enable=true
,该配置默认为false。否则执行该脚本并未真正删除主题,而是在Zookeeper的/admin/delete_topics目录下创建一个与待删除主题同名的节点,将该主题标记为删除状态。
kafka-topics.sh --delete --zookeeper zoo1:2181,zoo2:2181,zoo3:2181 --topic kafka-action
生产者基本操作
Kafka自带了一个终端延时生产者发布消息的脚本kafka-console-producer.sh
。
- **producer.config:**用于加载一个生产者级别相关配置的配置文件。
- **producer-property:**通过该参数可以直接在启动生产者命令行中设置生产者级别的配置,在命令行中设置的参数将会覆盖锁加载配置文件中的参数设置。