管理Kafka主题
操作场景
用户可以根据业务需要,使用集群客户端管理Kafka的主题。启用Kerberos认证的集群,需要拥有管理Kafka主题的权限。
前提条件
已安装客户端。
操作步骤
- 进入ZooKeeper实例页面:
- MRS 3.x之前版本,单击集群名称,登录集群详情页面,选择“组件管理 > ZooKeeper > 实例”。
若集群详情页面没有“组件管理”页签,请先完成IAM用户同步(在集群详情页的“概览”页签,单击“IAM用户同步”右侧的“同步”进行IAM用户同步)。
- MRS 3.x及后续版本,登录FusionInsight Manager,具体请参见访问FusionInsight Manager(MRS 3.x及之后版本)。然后选择“集群 > 待操作的集群名称 > 服务 > ZooKeeper > 实例”。
- MRS 3.x之前版本,单击集群名称,登录集群详情页面,选择“组件管理 > ZooKeeper > 实例”。
- 查看ZooKeeper角色实例的IP地址。
记录ZooKeeper角色实例其中任意一个的IP地址即可。
- 根据业务情况,准备好客户端,登录安装客户端的节点。
请根据客户端所在位置,参考使用MRS客户端章节,登录安装客户端的节点。
- 执行以下命令,切换到客户端目录,例如“/opt/client/Kafka/kafka/bin”。
cd /opt/client/Kafka/kafka/bin
- 执行以下命令,配置环境变量。
source /opt/client/bigdata_env
- 执行以下命令,进行用户认证。(普通模式跳过此步骤)
kinit 组件业务用户
- MRS 3.x之前版本:分别执行以下命令,管理Kafka主题。
- 创建主题
sh kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份个数 --zookeeper ZooKeeper角色实例所在节点IP地址:clientPort/kafka
- 删除主题
sh kafka-topics.sh --delete --topic 主题名称 --zookeeper ZooKeeper角色实例所在节点IP地址:clientPort/kafka
- 主题分区数和主题备份个数不能大于Kafka角色实例数量。
- 默认情况下,ZooKeeper的“clientPort”为“2181”。
- ZooKeeper角色实例所在节点IP地址,填写三个角色实例其中任意一个的IP地址即可。
- 使用Kafka主题管理消息,请参见管理Kafka主题中的消息。
- 创建主题
- MRS 3.x及后续版本:使用kafka-topics.sh管理Kafka主题。
- 创建主题:
Topic的Partition自动划分时,默认根据节点及磁盘上已有的Partition数进行均衡划分,如果期望根据磁盘容量进行Partition划分,那么需要修改Kafka服务配置“log.partition.strategy”为“capacity”。
Kafka创建Topic时,支持基于“机架感知” 和 “跨AZ特性” 两种选项组合生成分区及副本的分配方案且支持 “--zookeeper” 和 “--bootstrap-server”两种方式
- 禁用机架策略 & 禁用跨AZ特性 (默认策略)。
基于此策略新建的Topic的副本会完全随机分配到集群中任意节点上。
./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka
./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties
其中,使用“--bootstrap-server”方式创建Topic时,需配置“rack.aware.enable=false”和“az.aware.enable=false”。
- 启用机架策略 & 禁用跨AZ特性。
基于此策略新建的Topic的各个Partition的Leader会在集群节点上随机分配,但会确保同一Partition的不同Replica会分配在不同的机架上,所以当使用此策略时,需保证各个机架内的节点个数一致,否则会导致节点少的机架上的机器负载远高于集群平均水平。
./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka --enable-rack-aware
./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties
其中,使用 “--bootstrap-server”方式创建Topic时,需配置“rack.aware.enable=true”和“az.aware.enable=false”。
- 禁用机架策略 & 启用跨AZ特性。
基于此策略新建的Topic的各个Partition的Leader会在集群节点上随机分配,但会确保同一Partition的不同Replica会分配在不同的AZ上,所以当使用此策略时,需保证各个AZ内的节点个数一致,否则会导致节点少的AZ上的机器负载远高于集群平均水平。
./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka --enable-az-aware
./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties
其中,使用 “--bootstrap-server”方式创建Topic时,需配置“rack.aware.enable=false”和“az.aware.enable=true”。
- 启用机架策略 & 启用跨AZ特性。
基于此策略新建的Topic的各个Partition的Leader会在集群节点上随机分配,但会确保同一Partition的不同Replica会分配到不同AZ内的不同RACK上,使用此策略需保证每个AZ内的每个RACK上的节点个数一致,否则会导致集群内负载不均衡。
./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka --enable-rack-aware --enable-az-aware
./kafka-topics.sh --create --topic 主题名称 --partitions 主题占用的分区数 --replication-factor 主题的备份数 --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties
使用 “--bootstrap-server”方式创建Topic时,需配置“rack.aware.enable=true”和“az.aware.enable=true”。
- Kafka创建Topic支持 “--zookeeper” 和 “--bootstrap-server”两种方式,区别如下:
- “--zookeeper”方式由客户端生成副本分配方案,社区从一开始就支持这种方式,为了降低对Zookeeper组件的依赖,社区将在后续版本中删除对这种方式的支持。基于这种方式创建Topic时,可以通过 "--enable-rack-aware" 和 “--enable-az-aware”这两个选项自由组合来选用副本分配策略。注意:使用“--enable-az-aware”选项的前提是服务端开启了跨AZ特性,即服务端启动参数“az.aware.enable”为“true”,否则会执行失败。
- “--bootstrap-server”方式由服务端生成副本分配方案,后续版本,社区将只支持这种方式来进行Topic管理。基于这种方式创建Topic时,不支持 "--enable-rack-aware" 和 "--enable-az-aware"选项来控制副本分配策略,支持 “rack.aware.enable”和“az.aware.enable”这两个服务启动参数组合来控制副本分配策略,需注意的是“az.aware.enable”参数不可修改,在创建集群时,如果开启跨AZ特性,会自动配置为“true”;“rack.aware.enable”参数支持用户自定义修改。
- 禁用机架策略 & 禁用跨AZ特性 (默认策略)。
- 罗列主题:
- ./kafka-topics.sh --list --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka
- ./kafka-topics.sh --list --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties
- 查看主题:
- ./kafka-topics.sh --describe --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka --topic 主题名称
- ./kafka-topics.sh --describe --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties --topic 主题名称
- 修改主题:
- ./kafka-topics.sh --alter --topic 主题名称 --config 配置项=配置值 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka
- 扩展分区:
- ./kafka-topics.sh --alter --topic 主题名称 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka --command-config Kafka/kafka/config/client.properties --partitions 扩展后分区个数
- ./kafka-topics.sh --alter --topic 主题名称 --bootstrap-server Kafka集群IP:21007 --command-config Kafka/kafka/config/client.properties --partitions 扩展后分区个数
- 删除主题:
- ./kafka-topics.sh --delete --topic 主题名称 --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka
- ./kafka-topics.sh --delete --topic 主题名称 --bootstrap-server Kafka集群IP:21007 --command-config ../config/client.properties
- 创建主题: