模拟客户端(simulation client)是一个程序,它可以创建和订阅消息速率和大小可配的 topic。 有时需要使用多个客户端来模拟大负载,此时用户不需要直接与客户端交互,而是将请求委托给模拟控制器(simulation controller),然后模拟控制器将向客户端发送信号以开启负载。 The client implementation is in the class .

要启动模拟客户端,请使用 pulsar-perf 脚本并结合 simulation-client 命令,如下所示:

然后模拟客户端就可以接收模拟控制器的命令了。

要启动模拟控制器,使用pulsar-perf 脚本并结合simulation-controller 命令,参考如下:

在控制器启动之前需要先启动客户端。 启动后将有一段简单的提示,之后就可以在交互环境里向模拟客户端发出指令。 参数通常包括租户、命名空间和 topic。 在所有情况下,都使用租户、命名空间和 topic 的 BASE 名称。 例如,对于 topic persistent://my_tenant/my_cluster/my_namespace/my_topic,租户名称是 my_tenant,命名空间名称是 my_namespace,topic 的名称是 my_topic。 控制器可以执行以下操作:

  • 创建一个 topic (包含一个 producer 和一个 consumer)
  • 创建一组 topic (都包含一个 producer 和一个 consumer)
    • trade_group <tenant> <group> <num_namespaces> [--rate <message rate per second>] [--rand-rate <lower bound>,<upper bound>] [--separation <separation between creating topics in ms>] [--size <message size in bytes>] [--topics-per-namespace <number of topics to create per namespace>]
  • 更改现有 topic 的配置
    • change <tenant> <namespace> <topic> [--rate <message rate per second>] [--rand-rate <lower bound>,<upper bound>] [--size <message size in bytes>]
  • 更改一个 topic 组的配置
  • 关闭先前创建的 topic
  • 关闭以前创建的 topic 组
    • stop_group <tenant> <group>
  • 将历史数据从一个 ZooKeeper 复制到另一个 ZooKeeper,并基于该段历史中的消息速率和大小进行模拟
    • copy <tenant> <source zookeeper> <target zookeeper> [--rate-multiplier value]
  • 在当前的 ZooKeeper 上使用历史数据的做负载模拟(应该是正在模拟的同一个 ZooKeeper)
    • simulate <tenant> <zookeeper> [--rate-multiplier value]
  • 从给定的活动 ZooKeeper 中传输最新数据,以模拟该 ZooKeeper 的实时负载

这些命令中的 “group” 参数允许用户同时创建或影响多个 topic。 通过调用 trade_group 命令创建组,随后可使用 chang_groupstop_group 来修改和停止组。 所有 ZooKeeper 参数都来自于 zookeeper_host:port 列表。

To observe the behavior of the load manager in these simulations, one may utilize the broker monitor, which is implemented in org.apache.pulsar.testclient.BrokerMonitor. Broker 监视器在通过 watchers 获得更新后,将向控制台打印载入数据的表。

要启动 broker 监视器,请使用 pulsar-perf 脚本中的 monitor-brokers 命令:

控制台将不停的打印加载的数据,直到中断为止。