Kafka客户端使用实践
操作场景
该任务指导用户在运维场景或业务场景中使用Kafka客户端,实现对Kafka主题的创建、查看、修改、删除等操作。
前提条件
- 已安装客户端,例如安装目录为“/opt/client”,以下操作的客户端目录只是举例,请根据实际安装目录修改。
下载并安装集群客户端的具体操作,请参考安装MRS集群客户端。
- 各组件业务用户由MRS集群管理员根据业务需要创建。“机机”用户需要下载keytab文件。“人机”用户第一次登录时需修改密码。(集群未启用Kerberos认证(普通模式)时不涉及)
创建用户相关操作请参考创建Kafka用户并绑定角色。
- 在修改集群域名后,需要重新下载客户端,以保证客户端配置文件中kerberos.domain.name配置为正确的服务端域名。
约束与限制
- 本章节适用于MRS 3.x及后续版本。
- MRS 3.3.1及之后版本,Kafka不再支持使用“--zookeeper”方式创建Topic。
操作视频
使用Kafka客户端
- 登录MRS集群Manager。
登录集群Manager具体操作,请参考访问MRS集群Manager。
- 获取Kafka节点业务IP及端口。
- 获取ZooKeeper节点业务IP及端口。
- 以客户端安装用户,登录安装客户端的节点。
- 执行以下命令,切换到客户端安装目录,例如安装目录为“/opt/client”,具体以实际替换。
cd /opt/client - 执行以下命令配置环境变量。
source bigdata_env
- 执行以下命令,进行用户认证。(集群未启用Kerberos认证(普通模式)时跳过此步骤)
kinit 组件业务用户 - 执行以下命令进入Kafka客户端“bin”目录。
cd Kafka/kafka/bin
- 执行以下命令使用客户端工具查看帮助并使用。
- Kafka消息读取工具:
./kafka-console-consumer.sh
- Kafka消息发布工具:
./kafka-console-producer.sh
- Kafka Topic管理工具:
./kafka-topics.sh
- Kafka消息读取工具:
- 如果需要使用kafka-topics.sh管理Kafka主题,可以执行以下命令。
- 创建主题:
MRS 3.3.1及之后版本,Kafka不再支持使用“--zookeeper”方式创建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
- 罗列主题:
./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
- 创建主题:
常见问题
- --zookeeper和--bootstrap-server的区别是什么?
在Apache Kafka中,--zookeeper和--bootstrap-server是两个用于客户端工具(如生产者、消费者、管理命令)的参数,但它们的用途和适用场景有显著区别:
- --zookeeper:由客户端生成副本分配方案。
- 为了降低对ZooKeeper组件的依赖,MRS 3.3.1及之后版本,Kafka不再支持使用“--zookeeper”方式创建Topic。
- 使用该方式创建Topic时,支持使用“--enable-rack-aware”和“--enable-az-aware”(前提是服务端开启了跨AZ特性,即服务端启动参数“az.aware.enable”为“true”,否则会执行失败)这两个选项自由组合来选用副本分配策略。
- --bootstrap-server:由服务端生成副本分配方案。
- 使用该方式创建Topic时,支持使用“rack.aware.enable”和“az.aware.enable”这两个服务启动参数组合来控制副本分配策略。其中“az.aware.enable”参数不可修改,在创建集群时如果开启跨AZ特性,会自动配置为“true”;“rack.aware.enable”参数支持用户自定义修改。
- 不支持“--enable-rack-aware”和“--enable-az-aware”选项来控制副本分配策略。
- --zookeeper:由客户端生成副本分配方案。
- 删除Kafka Topic后发现未成功删除时,请参考如何解决Kafka Topic无法删除的问题章节进行处理。