二、ZK命令行操作

一、服务端常用命令

  • 启动 ZK 服务: sh bin/zkServer.sh start
  • 查看 ZK 服务状态: sh bin/zkServer.sh status
  • 停止 ZK 服务: sh bin/zkServer.sh stop
  • 重启 ZK 服务: sh bin/zkServer.sh restart

二、客户端常用命令

使用 zkCli.sh -server ip:port 连接到 ZooKeeper 服务,连接成功后,系统会输 出 ZooKeeper 的相关环境以及配置信息。 命令行工具的一些简单操作如下:

  • 显示根目录下、文件:ls/使用ls命令来查看当前ZooKeeper中所包含的内容
  • 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
  • 创建文件,并设置初始内容: create /zk “test” 创建一个新的 znode 节点“ zk ”以及与它关联的字符串 [-e] [-s] 【-e 零时节点】 【-s 顺序节点】
  • 获取文件内容:get /zk 确认 znode 是否包含我们所创建的字符串 [watch【] watch 监听】
  • 修改文件内容: set /zk “zkbak” 对 zk 所关联的字符串进行设置
  • 删除文件:delete/zk将刚才创建的znode删除,如果存在子节点删除失败
  • 递归删除:rmr /zk将刚才创建的znode删除,子节点同时删除
  • 退出客户端:quit
  • 帮助命令:help

三、ACL权限管理命令

Zookeeper 的 ACL(Access Control List),分为三个维度:scheme、id、permission 通常表示为:scheme: id : permission

  • schema:代表授权策略
  • id:代表用户
  • permission:代表权限

1、Scheme

  • world: 默认方式,相当于全世界都能访问
  • auth:代表已经认证通过的用户(可以通过 addauth digest user:pwd 来添加授权用户)
  • digest: 即用户名:密码这种方式认证,这也是业务系统中最常用的
  • ip:使用 Ip 地址认证

2、id

id 是验证模式,不同的 scheme,id 的值也不一样。

  • scheme 为 auth 时: username:password
  • scheme 为 digest 时: username:BASE64(SHA1(password))
  • scheme 为 ip 时: 客户端的 ip 地址
  • scheme 为 world 时 anyone

3、Permission

CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这 5 种权限 简写为 crwda(即:每个单词的首字符缩写)

  • CREATE©:创建子节点的权限
  • DELETE(d):删除节点的权限
  • READ®:读取节点数据的权限
  • WRITE(w):修改节点数据的权限
  • ADMIN(a):设置子节点权限的权限

4、操作命令

  • getAcl
create /testDir/testAcl deer # 创建一个子节点
getAcl /testDir/testAcl # 获取该节点的 acl 权限信息
  • setAcl
setAcl /testDir/testAcl world:anyone:crwa # 设置该节点的 acl 权限
getAcl /testDir/testAcl # 获取该节点的 acl 权限信息,成功后,该节点就少了 d 权限 
create /testDir/testAcl/xyz xyz-data # 创建子节点
delete /testDir/testAcl/xyz # 由于没有 d 权限,所以提示无法删除
  • addauth
    注册会话授权信息

Auth

 //需要先添加一个用户,然后才可以拿着这个用户去设置权限
addauth digest user1:123456
// 设置权限
setAcl /testDir/testAcl auth:user1:123456:crwa 

// 退出客户端后:
ls /testDir/testAcl #没有权限无法访问
create /testDir/testAcl/testb bbb #没有权限无法访问
addauth digest user1:123456 # 重新新增权限后可以访问了

Digest

auth 与 digest 的区别就是,前者使用明文密码进行登录,后者使用密文密码进行登录

create /testDir/testDigest data
addauth digest user1:123456
// 来设置权限
setAcl /testDir/testDigest digest:user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=:crwa 

// 通过明文获得密文
shell>
java -Djava.ext.dirs=/soft/zookeeper-3.4.12/lib -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider deer:123456
deer:123456->deer:ACFm5rWnnKn9K9RN/Oc8qEYGYDs=

ip

create /testDir/testIp data
setAcl /testDir/testIp ip:192.168.30.10:cdrwa 
getAcl /testDir/testIp


很多同学练习 setAcl 权限的时候由于失误,导致节点无法删除
create /enjoy1/node1 enjoy
setAcl /enjoy1 world:anyone:r
这个时候无论是 delete 还是 rmr 都没有权限删除

解决方式:启用 super 权限
使用 DigestAuthenticationProvider.generateDigest(“super:admin”); 获得密码

  1. 修改 zkServer 启动脚本增加 “-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6 HQs=”
  2. 启动客户端用管理员登陆
    addauth digest super:admin

四、常用四字命令

ZooKeeper 支持某些特定的四字命令字母与其的交互。用来获取 ZooKeeper 服务的当前状态及相关信息。
可通过 telnet 或 nc 向 ZooKeeper 提交相应的命令 : 当然,前提是安装好了 nc

yum install nc
  • echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为 follower 或者 leader
  • 使用 echo ruok|nc 127.0.0.1 2181 测试是否启动了该 Server,若回复 imok 表示已经启动。
  • echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。
  • echo kill | nc 127.0.0.1 2181 ,关掉 server
  • echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。
  • echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息
  • echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。
  • echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。
  • echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。
  • echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个 与 watch 相关的会话的列表。
  • echo wchp | nc 127.0.0.1 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个 与 session 相关的路径。

五、日志可视化
前面以及讲了两个非常重要的配置一个是 dataDir,存放的快照数据,一个是 dataLogDir,存放的是事务日志文件

java -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar:/soft/zookeeper-3.4.12/lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.LogFormatter log.1

java -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar:/soft/zookeeper-3.4.12/lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.SnapshotFormatter log.1
### 如何使用命令行操作 Kafka 消费者 #### 启动 ZooKeeper 和 Kafka 服务 为了能够正常使用 Kafka 的命令行工具来操作消费者,首先需要确保 ZooKeeper 和 Kafka 服务器已经成功启动[^5]。 ```bash cd zookeeper/apache-zookeeper-3.7.0-bin/ bin/zkServer.sh start cd ../kafka/kafka_2.12-3.0.0/ bin/kafka-server-start.sh -daemon config/server.properties ``` #### 使用 `kafka-console-consumer.sh` 工具消费消息 Kafka 提供了一个名为 `kafka-console-consumer.sh` 的脚本用于从指定的主题读取消息。可以通过设置不同的参数来自定义消费行为: - **连接到 Broker**: 需要指明 Bootstrap Server 地址以便建立与 Kafka Cluster 的通信。 - **订阅特定 Topic**: 可以通过 `--topic` 参数指定想要监听的消息队列名称。 基本语法如下所示[^4]: ```bash bin/kafka-console-consumer.sh --bootstrap-server <broker_address> --topic <topic_name> ``` 例如,如果希望从名为 `first` 的主题接收数据,则可以执行下面这条指令: ```bash bin/kafka-console-consumer.sh --bootstrap-server bigdata01:9092 --topic first ``` #### 自定义 Consumer Properties 对于更复杂的场景,还可以利用额外的选项进一步调整消费者的属性。比如,在 Spring Boot 应用程序中的配置文件里设置了诸如 Group ID、自动提交策略等重要参数[^3]: ```properties spring.kafka.consumer.group-id=test-consumer-group spring.kafka.consumer.enable-auto-commit=true spring.kafka.consumer.auto-commit-interval=3000 ``` 这些配置同样可以在命令行上作为参数传递给 `kafka-console-consumer.sh` 脚本。具体来说就是添加相应的键值对形式的参数,像这样: ```bash bin/kafka-console-consumer.sh \ --bootstrap-server localhost:9092 \ --group test-consumer-group \ --enable-auto-commit true \ --auto-offset-reset earliest \ --topic my-topic-name ``` 这里特别注意的是 `--auto-offset-reset` 这个参数决定了当没有初始偏移量或者当前偏移量不再存在时(即日志已被删除),消费者应该如何处理新加入的数据流;而 `earliest` 表示尽可能早地获取所有可用记录。 #### 查看已有的 Consumers Groups 并描述其状态 有时可能还需要了解某个具体的 consumer group 当前的状态信息,这时就可以借助于另一个有用的命令——`kafka-consumer-groups.sh` 来完成此任务[^1]。 ```bash bin/kafka-consumer-groups.sh --bootstrap-server node01:9092 --list bin/kafka-consumer-groups.sh --bootstrap-server node01:9092 --describe --group your_group_id_here ``` 上述两条语句分别用来列举所有的 consumer groups 以及查看某一群体的具体详情。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值