Kafka 命令速览说明
主题操作
使用 kafka-topic.sh 工具可以执行主题大部分操作。我们可以创建、修改、删除和查看集群里的主题。当然要操作topic元数据,而这些元数据存放在Zookeeper上,因此我们需要通过 --zookeeper 参数,比如 --zookeeper hadoop102:2181/kafka-cluster (zookeeper服务要提前启动)。
创建主题
在集群中创建一个主题需要用到3个参数
- 主题名字
- 复制系数
- 主题的副本数量
- 分区
- 主题的分区数量
命令
$ kafka-topic.sh --zookeeper url:port/dir --create --topic <name> --replication-factor <integer> --partitions <integer>
实例我们创建一个名为 my-topic 的主题,主题包含8个分区,每个分区拥有2个副本。
增加分区
主题基于分区进行伸缩和复制,增加分区主要是为了扩展主题容量或者降低单个分区的吞吐量。
如果在单个消费者群组内运行更多的消费者,那么主题数量也需要相应增加,因为一个分区只能由群组里的一个消费者读取。
调整基于键的主题
这是很困难的,如果改变了分区的数量,则键到分区之间的映射也会发生变化。
索引继续键的主题来说,建议在一开始就设置好分区的数量,避免以后对其进行调整。
命令
实例将 my-topic 主题的分区数量增加到 16
# bin/kafka-topics.sh --zookeeper hadoop102:2181 --alter --topic my-topic --partitions 16
删除主题
如果一个主题不再被使用,只要他还存在集群中,就会占用一定数量的磁盘和文件句柄。为了能够删除主题,broker的delete.topic.enable = true。
删除主题会丢弃主题里所有的数据,这是一个不可逆的操作,因此要小心。
命令
示例:删除 my-topic 主题。
# bin/kafka-topics.sh --zookeeper hadoop102:2181 --delete --topic my-topic
主题列表
列出集群中所有主题,主题之间没有顺序。
命令
# bin/kafka-topics.sh --zookeeper hadoop102:2181 --list
主题详细信息
详细信息包括 分区数量、主题覆盖配置以及每个分区的副本清单。
命令
# bin/kafka-topics.sh --zookeeper hadoop102:2181 --describe
–under-replicated-partitions 参数可以列出所有包含不同步副本的分区
# bin/kafka-topics.sh --zookeeper hadoop102:2181 --describe --under-replicated-partitions
–unavaliable-partitions 参数可以列出没有首领的分区,这些分区已经处于离线状态,对于生产者和消费者来说是不可用的。
# bin/kafka-topics.sh --zookeeper hadoop102:2181 --describe --unavaliable-partitions
消费者群组
旧版本的消费者客户端,使用 --zookeeper 和 --list 参数列出消费者群组;
新版本的消费者客户端,则要使用 --bootstrap-server、–list 和 --new-consumer 参数。
命令
旧版本:
# bin/kafka-consumer-groups.sh --zookeeper hadoop102:2181 --list
新版本:
# bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server hadoop102:2181 --list
获取一个群组的详细信息
# bin/kafka-consumer-groups.sh --zookeeper hadoop102:2181 --describe --group console-consumer-19036
相关参数:
- CURRENT-OFFSET:消费者群组最近提交的偏移量,也就是消费者在分区中读取的当前位置
- LOG-END-OFFSET:当前高水位偏移量
- LAG:消费者的CURRENT-OFFSET和broker的LOG-END-OFFSET之间的差距
动态配置变更
命令
实例:将主题 my-topic 的消息保留时间设为 1 个小时。
# kafka-configs.sh --zookeeper hadoop102:2181 --alter --entity-type topics --entity-name my-topic --add-config retention.ms=3600000
消费和生产
消费者命令
–topic 用于指定单个待读取的主题
–whitelist 与白名单正则表达式匹配的主题将会被读取
–blacklist 与黑名单正则表达式匹配的主题不会被读取
# bin/kafka-console-consumer.sh --zookeeper hadoop102:2181 --topic my-topic
–from-beginning 指定从最旧的偏移量开始读取数据,否则就从最新的偏移量开始读取。
–max-messages NUM 指定在退出之前最多读取NUM个消息
生产者命令
# bin/kafka-console-producer.sh --broker-list hadoop102:9092,hadoop103:9092 --topic my-topic