本章以Kafka 2.5.0版本使能鲲鹏BoostKit分布式存储算法加速库CRC32加速算法,其他版本可参考本章节使能加速算法。使能该加速算法用于加速Kafka网络传输的CRC32算法计算性能,提升端到端性能。
基于开源版本Kafka应用功能代码Patch(对于闭源深度定制Kafka查看Patch并对应修改),并修改Kafka编译脚本。Kafka组件通过CRC32C决定CRC32C的工厂类,在其静态代码块中,新增分支针对Arm架构的机器,通过JNI调用KSAL算法加速库来使能。
类别 |
支持版本 |
---|---|
Java |
|
操作系统 |
openEuler 22.03 LTS SP3 |
Kafka |
1.0.0~3.8.0 |
Gradle |
6.1.1 |
Kafka使能鲲鹏BoostKit分布式存储算法加速库CRC32加速算法所需软件包及其获取方式如表2所示。
名称 |
软件包名称 |
发布类型 |
说明 |
获取地址 |
---|---|---|---|---|
KSAL(Kunpeng Storage Acceleration Library) |
BoostKit-KSAL_1.6.0.zip |
闭源 |
华为自研的存储算法加速库,采用鲲鹏优化的算法代替主流开源算法,提升存储性能。当前包括EC(Erasure Code)算法、CRC16 T10DIF(Cyclic Redundancy Check 16 T10 Data Integrity Field)算法和CRC32(Cyclic Redundancy Check 32)算法。 |
|
KSAL的Kafka Patch |
ksal-crc32-code.patch |
开源 |
集成KSAL加速库的Patch,编译Kafka的时候应用。 |
1
|
wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u252-b09/OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz --no-check-certificate |
1 2 3 |
tar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz mkdir -p /opt/tools/installed/ mv jdk8u252-b09 /opt/tools/installed/ |
1
|
vi /etc/profile
|
1 2 |
export JAVA_HOME=/opt/tools/installed/jdk8u252-b09 export PATH=$JAVA_HOME/bin:$PATH |
1
|
source /etc/profile |
1
|
wget https://services.gradle.org/distributions/gradle-6.1.1-bin.zip --no-check-certificate |
1 2 |
unzip gradle-6.1.1-bin.zip mv gradle-6.1.1 /opt/tools/installed/ |
1
|
vi /etc/profile
|
1 2 |
export GRADLE_HOME=/opt/tools/installed/gradle-6.1.1 export PATH=$GRADLE_HOME/bin:$PATH |
1
|
source /etc/profile |
1
|
gradle -version
|
1
|
wget https://kunpeng-repo.obs.cn-north-4.myhuaweicloud.com/Kunpeng%20BoostKit/Kunpeng%20BoostKit%2024.0.RC2/BoostKit-KSAL_1.6.0.zip --no-check-certificate |
1 2 |
unzip BoostKit-KSAL_1.6.0.zip rpm -ivh libksal-release-1.6.0.oe1.aarch64.rpm |
1
|
mkdir -p /opt/crc32 |
1 2 3 |
cd /opt/crc32 wget https://gitee.com/kunpengcompute/boostkit-bigdata/repository/archive/main.zip --no-check-certificate unzip main.zip |
1 2 3 |
cd /opt/crc32 wget https://github.com/apache/kafka/archive/refs/tags/2.5.0.zip --no-check-certificate unzip 2.5.0.zip |
1 2 |
cd kafka-2.5.0 git apply /opt/crc32/boostkit-bigdata-main/kafka/ksal-crc32-code.patch |
1
|
git apply /opt/crc32/boostkit-bigdata-main/kafka/ksal-crc32-build-code.patch |
1
|
vi build.gradle
|
1 2 3 4 5 6 7 |
task compileCrcJNI(type:Exec) { def javaHome = System.getenv('JAVA_HOME') commandLine 'gcc', '-fPIC', '-I', javaHome + '/include', '-I', javaHome + '/include/linux', '-shared', '-o', 'src/main/resources/libNativeCrc32C.so', 'src/main/native/org/apache/kafka/common/utils/KsalCrc32C.c', '-lksal' } compileJava.dependsOn 'compileCrcJNI' |
1
|
gradle -g /$UserHome/gradleRepository releaseTarGz -info |
1
|
ll core/build/distributions/
|
1
|
tar -zxvf core/build/distributions/kafka_2.12-2.5.0.tgz -C /usr/local |
1 2 3 |
cd /usr/local/kafka_2.12-2.5.0 bin/zookeeper-server-start.sh -daemon config/zookeeper.properties bin/kafka-server-start.sh -daemon config/server.properties |
1
|
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 70 --topic test |
1 2 |
bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test randomtest |
该脚本为Kafka自带脚本,用于往指定Kafka的topic发送消息。
该操作在执行后,可一直输入任意消息,按“Enter”键发送。若想中止,可按“ctrl+c”退出。
1
|
cat logs/server.log | grep KSAL |