206
云计算
负载均衡
产品简介
产品价格
快速入门
用户指南
实践操作
常见问题
购买指南
云服务器
产品简介
计费规则
购买指导
控制台使用指南
常见问题
云数据库
产品简介
计费规则
购买指导
快速入门
连接实例
控制台使用指南
对象存储
产品简介
控制台使用指南
程序员百科
Python
基于eRDMA部署高网络性能的Kafka集群-阿里云服务器ECS使用教程

产品推荐:

1、安全稳定的云服务器租用,2核/2G/5M仅37元,点击抢购>>>

2、高防物理服务器20核/16G/50M/500G防御仅350元,点击抢购>>>

3、百度智能建站(五合一网站)仅880元/年,点击抢购>>> 模板建站(PC+手机站)仅480元/年,点击抢购>>>

4、阿里云服务器2核2G3M仅99元/年、2核4G5M仅199元/年,新老同享,点击抢购>>> 

5、腾讯云服务器2核2G4M仅99元/年、新老同享,点击抢购>>>   


点击这里点击这里进入阿里云ECS官方页面,立体验云服务器ECS>>>

基于支持eRDMA能力的ECS实例部署Kafka集群,可以充分利用eRDMA提供的低延迟、高吞吐以及低CPU占用等特性,以优化Kafka集群内部节点间的数据传输效率,适用于对消息吞吐量和时延要求较高的应用场景。本文介绍如何基于支持eRDMA能力的ECS实例部署Kafka集群,并测试eRDMA对Kafka性能的提升效果

说明
  • Kafka是一个分布式流处理平台,用于高效地处理和存储大量数据流,支持实时消息发布和订阅,广泛应用于日志聚合、事件源、实时分析等场景。更多信息,请参见Kafka官方文档。

  • eRDMA(Elastic Remote Direct Memory Access,弹性RDMA),是阿里云提供的低延迟、大吞吐、高弹性的高性能RDMA网络服务。更多信息,请参见eRDMA概述。

步骤一:准备ECS实例

部署集群需要准备多台ECS实例用于搭建Broker、Zookeeper服务、部署压测环境。

  • Broker:集群中的核心数据节点,负责实际的消息存储、传输和管理。

  • ZooKeeper:在Kafka集群中提供分布式服务协调与管理功能。

  • 压测实例:用于验证已部署的Kafka集群的性能。

本文准备5台ECS实例,1台作为Zookeeper实例、3台作为Broker实例、2台作为压测实例,实例配置要求如下:

重要

选用的实例规格需支持eRDMA能力。支持eRDMA能力的实例规格,请参见使用限制。






用途

所需实例

云盘要求

网络要求

镜像要求

作为Broker实例

3台,本文示例规格ecs.g8a.2xlarge

选择ESSD PL3云盘,容量按需选择

  • 均需开通公网IP地址

  • 在同一个专有网络VPC,默认内网互通

  • 均需开启eRDMA功能。更多信息,请参见在企业级实例上配置eRDMA

Alibaba Cloud Linux 3.2104 LTS 64位

作为Zookeeper实例

1台,本文示例规格ecs.g8a.xlarge

无限制

作为压测实例

1台,本文示例规格ecs.g8a.16xlarge

无限制

步骤二:安装工具和Kafka

您可以依次登录步骤一准备的5台ECS实例,执行相关命令安装SMC-R、Java工具、Kafka软件。

说明

在使用eRDMA功能时,需要部署SMC-R。SMC-R工作于内核空间,eRDMA资源的使用、管理与维护均由SMC-R协议栈完成。更多信息,请参见共享内存通信(SMC)使用说明。

  1. 依次登录所有ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例。

  2. (条件必选)确保所有实例内核版本(通过uname -r查询)大于等于5.10.134-16.3。如果实例内核版本小于5.10.134-16.3,执行以下命令将内核升级至最新版本。

     
    sudo yum update kernel
    sudo reboot
  3. 执行以下命令,在所有实例上安装SMC工具集smc-tools。

     
    sudo yum install smc-tools -y
  4. 执行以下命令,在所有实例上查看eRDMA设备,确保能查到eRDMA设备。

     
    smcr dev

    返回结果示例:

     
    Net-Dev IB-Dev IB-P IB-State Type Crit #Links PNET-ID 
    eth0 erdma_0 1 ACTIVE 0x107f No 0
  5. 执行以下命令,在所有实例上禁用IPv6。

    说明

    阿里云eRDMA设备与SMC目前均不支持使用IPv6地址,禁用IPv6可以确保流量正确地通过IPv4走RDMA通道。

     
    sudo sysctl net.ipv6.conf.all.disable_ipv6=1
  6. 执行以下命令,安装Java、Git工具。

     
    sudo yum install java-11-openjdk-1:11.0.21.0.9-2.0.3.al8 java-11-openjdk-devel-1:11.0.21.0.9-2.0.3.al8 git -y
  7. 执行以下命令,下载Kafka并解压。

     
    wget https://archive.apache.org/dist/kafka/3.5.0/kafka_2.13-3.5.0.tgz
    tar -xf kafka_2.13-3.5.0.tgz

步骤三:启动Kafka的Zookeeper和Broker

  1. 登录所有实例。

  2. 修改/etc/hosts文件,分别在每个实例的/etc/hosts文件中添加所有实例的私网IP和主机名的对应关系。

    image

  3. 在Zookeeper实例上执行以下命令,启动Zookeeper。

     
    bash $HOME/kafka_2.13-3.5.0/bin/zookeeper-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/zookeeper.properties
  4. 分别在3台Broker实例上启动Broker。

    说明

    如果是在不使用eRDMA功能的场景下测试,需要去掉命令中的smc_run

    • 在第1台Broker实例上指定Broker ID为broker 0并启动Broker,<zookeeper ip>需替换为Zookeeper实例的私网IP地址。

       
      KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" smc_run bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/server.properties --override broker.id=0 --override log.dirs=$HOME/kafka-logs --override zookeeper.connect=<zookeeper ip>:2181
    • 在第2台Broker实例上指定Broker ID为broker 1并启动Broker,<zookeeper ip>需替换为Zookeeper实例的私网IP地址。

       
      KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" smc_run bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/server.properties --override broker.id=1 --override log.dirs=$HOME/kafka-logs --override zookeeper.connect=<zookeeper ip>:2181
    • 在第3台Broker实例上指定Broker ID为broker 2并启动Broker,<zookeeper ip>需替换为Zookeeper实例的私网IP地址。

       
      KAFKA_HEAP_OPTS="-Xmx4G -Xms4G" smc_run bash $HOME/kafka_2.13-3.5.0/bin/kafka-server-start.sh -daemon $HOME/kafka_2.13-3.5.0/config/server.properties --override broker.id=2 --override log.dirs=$HOME/kafka-logs --override zookeeper.connect=<zookeeper ip>:2181

步骤四:性能测试

下载Benchmark工具并模拟一个最高可用网络带宽的环境,然后分别在启用eRDMA功能和不启用eRDMA功能的场景中测试Kafka性能,根据测试结果比较eRDMA对Kafka集群带来的性能提升。

  1. 登录压测实例,下载并编译Open Messaging Benchmark。

    1. 下载并安装Open Messaging Benchmark编译工具Maven。

       
      wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
      tar -xf apache-maven-3.8.8-bin.tar.gz
      export PATH=$PATH:$HOME/apache-maven-3.8.8/bin/
    2. 配置Maven源加速。

       
      vi $HOME/apache-maven-3.8.8/conf/settings.xml

      settings.xml mirrors标签内添加下列内容后保存文件并退出。

       
      <mirror>
          <id>nexus-aliyun</id>
          <mirrorOf>central</mirrorOf>
          <name>Nexus aliyun</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>
    3. 下载Open Messaging Benchmark源码并编译。

       
      git clone https://github.com/openmessaging/benchmark.git
      cd benchmark && mvn clean verify -DskipTests
  2. 配置kafka-throughput.yaml中的Broker地址。

     
    vi $HOME/benchmark/driver-kafka/kafka-throughput.yaml

    如下回显信息,将文件中的bootstrap.servers=localhost:9092内容替换为bootstrap.servers=<broker0的私网IP地址>:9092,<broker1的私网IP地址>:9092,<broker2的私网IP地址>:9092

     
    commonConfig: |
      bootstrap.servers=<172.17.XX.XX>:9092,<172.17.XX.XX>:9092,<172.17.XX.XX>:9092
      default.api.timeout.ms=1200000
      request.timeout.ms=1200000
  3. 配置Kafka消息发送速率,模拟一个最高可用网络带宽的环境,以便测试Kafka集群的性能。

     
    vi $HOME/benchmark/workloads/1-topic-100-partitions-1kb-4p-4c-200k.yaml

    需要修改文件中的producerRate: <消息发送速率>参数值,消息发送速率 = Broker可用带宽/单个消息的大小

    本文的Broker实例规格为ecs.g8a.2xlarge,该规格的最高网络带宽为4 Gbit/s,3台Broker实例的总带宽为12 Gbit/s。由于Kafka采用三副本机制,实际可用带宽约为总带宽的三分之一,即Broker可用带宽= 12 Gbit/s / 3 = 4 Gbit/s(等于512 MB/s),由于本文是在workloads目录下进行测试,该目录下单个消息的大小为1 KB,则消息发送速率=512 MB/s / 1 KB = 524,288,因此您需要修改文件中的producerRate: <消息发送速率>producerRate: 524288。在实际测试过程中,请根据业务需求进行调整。

  4. 在以下两种场景中分别测试Kafka集群的性能。

    使用eRDMA功能测试
    不使用eRDMA功能测试
     
    smc_run $HOME/benchmark/bin/benchmark --drivers $HOME/benchmark/driver-kafka/kafka-throughput.yaml $HOME/benchmark/workloads/1-topic-100-partitions-1kb-4p-4c-2000k.yaml

    在Kafka的测试过程中,您可以同时进行以下操作:

    • 另起一个压测实例窗口执行smcss -a命令,查看消息传输过程中链接使用的是SMC-R。

    • 在3台Broker实例上执行sar命令,查看CPU占用情况。例如sar 1 20命令表示每1秒采样一次,采样20次后退出,然后将3台Broker实例的CPU占用情况相加,可以得到总的CPU占用情况。

    重要

    在使用eRDMA功能测试后,为避免测试留存信息对不使用eRDMA功能测试产生影响,您可以按照以下方法清空Broker和Zookeeper的记录,并重启Broker和Zookeeper。

    清空Broker和Zookeeper记录、重启Broker和Zookeeper

  5. 获取两种测试结果中的时延信息,比较eRDMA对Kafka集群带来的性能提升。

    找到最后一处Aggregated Pub Latency (ms)输出,avg为平均时延,99%为P99时延,999%为P999时延。


这条帮助是否解决了您的问题? 已解决 未解决

提交成功!非常感谢您的反馈,我们会继续努力做到更好! 很抱歉未能解决您的疑问。我们已收到您的反馈意见,同时会及时作出反馈处理!