1简介
Apache Kafka是一个开源流处理软件平台,用Scala和Java编写。该项目旨在提供统一、高吞吐量、低延迟的平台,用于处理实时数据馈送。它的存储层本质上是一个大规模可扩展设计为分布式事务日志的发布/订阅消息队列。
官方链接:https://kafka.apache.org/
类别:开源流处理平台
语言:Scala/Java
2环境
3依赖安装
3.1安装OpenJDK
下载并安装到指定目录(如/opt/tools/installed):
【注】:使用系统自带Openjdk软件包可以通过执行“yum -y install java-1.8.0*”进行安装然后参考如下步骤配置JAVA_HOME环境变量;
配置java环境变量,在/etc/profile文件末尾处增加下面的代码:
运行下面命令,使修改的环境变量生效:
3.2安装GCC等依赖项
挂载OS镜像:
修改/etc/yum.repos.d/ns7-adv.repo文件,配置yum本地源:
运行下面的命令,使yum源配置生效:
yum安装GCC等相关依赖:
3.3安装Maven
下载并安装到指定目录(如/opt/tools/installed):
修改maven环境变量,在/etc/profile文件末尾增加下面高亮代码:
运行下面的命令,是修改的环境变量生效:
修改maven配置文件中的:本地仓路径、远程仓等:
3.4安装ant编译软件
1、下载ant开源软件包
2、解压apache-ant-1.9.15-bin.tar.gz
3、进入解压路径
4、将ANT_HOME配置到/etc/profile环境变量中
5、使ANT_HOME环境变量生效
3.5安装gradle编译软件
1、下载grade开源软件包
2、解压gradle-5.4.1-bin.zip
3、进入解压路径
4、将ANT_HOME配置到/etc/profile环境变量中
5、使ANT_HOME环境变量生效
3.6安装编译gradle-scoverage
1、下载ant开源软件包
2、解压3.1.3.tar.gz
3、进入解压路径
4、使用gradle编译gradle-scoverage-3.1.3
3.7安装编译shadow
1、下载shadow开源软件包
2、解压5.0.0.tar.gz
3、进入解压路径
4、使用gradle编译shadow-5.0.0
3.8安装scala软件
1、下载scala安装软件包
2、解压scala-2.11.11.tgz
3、将SCALA_HOME配置到/etc/profile环境变量中
5、使ANT_HOME环境变量生效
3.9对gcc、g++和c++增加-fsigned-char选项
1、对gcc增加-fsigned-char选项
1)使用which gcc命令寻找gcc所在路径(一般位于/usr/bin/gcc)
2)、更改gcc的名字(比如改成gcc-arm)
3)、进入gcc所在目录执行vi gcc,并填入如下内容保存:
#! /bin/sh
/usr/bin/gcc-arm -fsigned-char "$@"
4)、执行chmod +x gcc给脚本添加执行权限
2、对g++增加-fsigned-char选项
1)使用which g++命令寻找g++所在路径(一般位于/usr/bin/g++)
2)、更改g++的名字(比如改成g++-arm)
3)、进入g++所在目录执行vi g++,并填入如下内容保存:
#! /bin/sh
/usr/bin/g++-arm -fsigned-char "$@"
4)、执行chmod +x g++给脚本添加执行权限
3、对c++增加-fsigned-char选项
1)使用which c++命令寻找g++所在路径(一般位于/usr/bin/c++)
2)、更改c++的名字(比如改成c++-arm)
3)、进入c++所在目录执行vi c++,并填入如下内容保存:
#! /bin/sh
/usr/bin/c++-arm -fsigned-char "$@"
4)、执行chmod +x c++给脚本添加执行权限
4移植分析
使用鲲鹏DevKit工具检查Kafka-0.8.2.2对应x86的安装包(kafka_2.10-0.8.2.2.tgz)或源码包是否有依赖x86的so文件,通过检查Kafka-2.10-0.8.2.2对应x86安装包发现有依赖的“liblz4-java.so,lz4-1.2.0.jar”和“libsnappyjava.so,snappy-java-1.1.1.7.jar”:
需要先编译lz4-1.2.0.jar和snappy-java-1.1.1.7.jar使其中包含的liblz4-java.so和libsnappyjava.so使能arm,编译过程见 “5 依赖库编译”。
5依赖库编译
5.1编译lz4-1.2.0.jar
1、从github网站下载源码并解压
2、进入解压目录
3、修改build.xml增加-fsigned-char
4、修改ivy.xml中lz4-java编译后的版本号
5、执行ant编译命令进行编译
报上图错误时执行ant ivy-bootstrap手动下载ivy-2.2.0.jar
【注】:如通过ant ivy-bootstrap无法下载ivy-2.2.0.jar,可以通过wget手动下载ivy-2.2.0.jar(wget http://repo1.maven.org/maven2/org/apache/ivy/ivy/2.2.0/ivy-2.2.0.jar);
6、重新执行ant编译
7、查看编译后的lz4-1.2.0.jar
8、将编译的lz4-1.2.0.jar替换到本地maven仓和本地gradle仓
5.2编译snappy-java-1.1.1.7.jar
Snappy是Google开源的压缩/解压缩库,snappy-java封装了其接口
1)从github网站下载源码并解压
2)修改Makefile文件中snappy源码的下载路径:
【注】因为默认的路径已经失效,需要如下使用新的下载路径:http://repository.timesys.com/buildsources/s/snappy/snappy-1.0.4/snappy-1.0.4.tar.gz
3)执行yum -y install libstdc++* glibc*安装相关依赖解决
4)修改sbt文件中sbt-launch.jar的下载地址
4)执行make编译并查看编译后的snappy-java-1.1.1.7.jar
5)将编译后的snappy-java-1.1.1.7.jar覆盖到本地maven仓和本地gradle仓
【注】编译过程报错参考https://bbs.huaweicloud.com/forum/thread-67215-1-1.html
6编译安装
1、从github网站下载源码并解压
2、进入解压目录
3、修改build.gradle
4、执行gradle -g /$UserHome/gradleRepository clean
5、执行gradle -g /$UserHome/gradleRepository releaseTarGz -info
6、查看编译的文件
【注】编译后有x86的jar依赖情况下,需要参考“5依赖库编译”解决依赖后重新编译kafka,直到没有依赖即可。
7验证
1、编译验证
使用鲲鹏DevKit工具检查编译后的kafka_2.11-1.1.0.tgz是否不再含有依赖的x86架构的so文件,如果还有依赖的x86架构的so文件,则需要继续完成对应jar包的编译,直到无依赖的x86架构的so文件后,再次编译该组件并通过鲲鹏DevKit工具检查确认,编译后的组件包不再有依赖的x86架构的so文件则表明编译成功。
2、功能验证
参考https://www.huaweicloud.com/kunpeng/software/kafka.html
8参考信息
1、https://www.huaweicloud.com/kunpeng/software/kafka.html
9FAQ
1、 执行gradle -g /$UserHome/gradleRepository clean出现“Could not create task ‘:core:compileScala’”报错,详细报错如下
解决方法:
1简介
Apache Kafka是一个开源流处理软件平台,用Scala和Java编写。该项目旨在提供统一、高吞吐量、低延迟的平台,用于处理实时数据馈送。它的存储层本质上是一个大规模可扩展设计为分布式事务日志的发布/订阅消息队列。
官方链接:https://kafka.apache.org/
类别:开源流处理平台
语言:Scala/Java
2环境
类别
子项
版本
获取地址(方法)
硬件
CPU
Kunpeng 920
iBMC
网络
Ethernet-10GE
iBMC
存储
SATA 4T
iBMC
内存
xxG xxxMHz
iBMC
OS
NeoKylin
7.5
cat /etc/neokylin-release
Kernel
4.14.0
cat /proc/version
软件
GCC
4.8.5
gcc -v
OpenJDK
1.8.0_191
参考下面安装说明
Kafka
2.11-1.1.0
参考下面安装说明
3依赖安装
3.1安装OpenJDK
下载并安装到指定目录(如/opt/tools/installed):
wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u191-b12/OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gz
tar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gz
mv jdk8u191-b12 /opt/tools/installed/
【注】:使用系统自带Openjdk软件包可以通过执行“yum -y install java-1.8.0*”进行安装然后参考如下步骤配置JAVA_HOME环境变量;
配置java环境变量,在/etc/profile文件末尾处增加下面的代码:
JAVA_HOME=/opt/tools/installed/jdk8u191-b12
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
运行下面命令,使修改的环境变量生效:
source /etc/profile
3.2安装GCC等依赖项
挂载OS镜像:
mount -o loop /home/NeoKylin/nsV7Update5-adv-lic-build05-aarch64.iso /mnt/NeoKylin/
修改/etc/yum.repos.d/ns7-adv.repo文件,配置yum本地源:
[ns7-adv-os]
name=NeoKylin Linux Advanced Server 7 - Os
baseurl= file:///mnt/NeoKylin
gpgcheck=0
gpgkey=file:///mnt/NeoKylin/RPM-GPG-KEY-neokylin-release
enabled=1
运行下面的命令,使yum源配置生效:
yum clean all
yum makecache
yum安装GCC等相关依赖:
sudo yum install -y snappy snappy-devel autoconf automake libtool git gcc gcc-c++ make cmake openssl openssl-devel ncurses-devel zlib zlib-devel bzip2 bzip2-devel bzip2-libs readline readline-devel bison zip unzip tar tcl
3.3安装Maven
下载并安装到指定目录(如/opt/tools/installed):
wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
tar -zxf apache-maven-3.5.4-bin.tar.gz
mv apache-maven-3.5.4 /opt/tools/installed/
修改maven环境变量,在/etc/profile文件末尾增加下面高亮代码:
JAVA_HOME=/opt/tools/installed/jdk8u191-b12
M2_HOME=/opt/tools/installed/apache-maven-3.5.4
PATH=$M2_HOME/bin:$JAVA_HOME/bin:$PATH
export M2_HOME JAVA_HOME PATH
运行下面的命令,是修改的环境变量生效:
source /etc/profile
修改maven配置文件中的:本地仓路径、远程仓等:
配置文件路径:/opt/tools/installed/apache-maven-3.5.4/conf/settings.xml
本地仓库配置:(可选,可保持默认)
<!--默认在“~/.m2/”目录下,可以按下行格式修改成你自己想保存的目录-->
<localRepository>/path/to/local/repo</localRepository>
远程仓库配置:(可选,默认用maven2官方远程仓但访问慢,建议用国内maven仓)
<!--修改成自己搭建的maven仓库,如果没有,可以使用下面的华为开源maven仓 -->
<mirror>
<id> huaweimaven</id>
<name> huaweicloud maven</name>
<url> https://mirrors.huaweicloud.com/repository/maven/</url>
<mirrorOf>central</mirrorOf>
</mirror>
配置代理:(可选,外网环境下不用配置maven的代理)
<proxies>
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>用户名</username>
<password>密码</password>
<host>代理服务器网址</host>
<port>代理服务器端口</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
</proxies>
3.4安装ant编译软件
1、下载ant开源软件包
wget https://apache.website-solution.net//ant/binaries/apache-ant-1.9.15-bin.tar.gz
2、解压apache-ant-1.9.15-bin.tar.gz
tar zxvf apache-ant-1.9.15-bin.tar.gz
3、进入解压路径
cd apache-ant-1.9.15/
4、将ANT_HOME配置到/etc/profile环境变量中
vi /etc/proflile
增加如下内容
export ANT_HOME=/home/test/apache-ant-1.9.15
export PATH=$ ANT_HOME/bin:$PATH
5、使ANT_HOME环境变量生效
source /etc/proflile
3.5安装gradle编译软件
1、下载grade开源软件包
wget https://downloads.gradle.org/distributions/gradle-5.4.1-bin.zip
2、解压gradle-5.4.1-bin.zip
unzip gradle-5.4.1-bin.zip
3、进入解压路径
cd gradle-5.4.1/
4、将ANT_HOME配置到/etc/profile环境变量中
vi /etc/proflile
5、使ANT_HOME环境变量生效
source /etc/proflile
3.6安装编译gradle-scoverage
1、下载ant开源软件包
wget https://github.com/scoverage/gradle-scoverage/archive/3.1.3.tar.gz
2、解压3.1.3.tar.gz
tar zxvf 3.1.3.tar.gz
3、进入解压路径
cd gradle-scoverage-3.1.3/
4、使用gradle编译gradle-scoverage-3.1.3
gradle assemble
3.7安装编译shadow
1、下载shadow开源软件包
wget https://github.com/johnrengelman/shadow/archive/5.0.0.tar.gz
2、解压5.0.0.tar.gz
tar zxvf 5.0.0.tar.gz
3、进入解压路径
cd shadow-5.0.0/
4、使用gradle编译shadow-5.0.0
gradle assemble
3.8安装scala软件
1、下载scala安装软件包
wget https://downloads.lightbend.com/scala/2.11.11/scala-2.11.11.tgz
2、解压scala-2.11.11.tgz
tar zxvf scala-2.11.11.tgz -d /usr/local
3、将SCALA_HOME配置到/etc/profile环境变量中
vi /etc/proflile
增加如下内容
export SCALA_HOME=/usr/local/scla-2.11.11
export PATH=$PATH:$SCALA_HOME/bin
5、使ANT_HOME环境变量生效
source /etc/proflile
3.9对gcc、g++和c++增加-fsigned-char选项
1、对gcc增加-fsigned-char选项
1)使用which gcc命令寻找gcc所在路径(一般位于/usr/bin/gcc)
which gcc
2)、更改gcc的名字(比如改成gcc-arm)
mv /usr/bin/gcc /usr/bin/gcc-arm
3)、进入gcc所在目录执行vi gcc,并填入如下内容保存:
#! /bin/sh
/usr/bin/gcc-arm -fsigned-char "$@"
cd /usr/bin/
vi gcc
4)、执行chmod +x gcc给脚本添加执行权限
chmod +x gcc
2、对g++增加-fsigned-char选项
1)使用which g++命令寻找g++所在路径(一般位于/usr/bin/g++)
which g++
2)、更改g++的名字(比如改成g++-arm)
mv /usr/bin/g++ /usr/bin/g++-arm
3)、进入g++所在目录执行vi g++,并填入如下内容保存:
#! /bin/sh
/usr/bin/g++-arm -fsigned-char "$@"
cd /usr/bin/
vi g++
4)、执行chmod +x g++给脚本添加执行权限
chmod +x g++
3、对c++增加-fsigned-char选项
1)使用which c++命令寻找g++所在路径(一般位于/usr/bin/c++)
which c++
2)、更改c++的名字(比如改成c++-arm)
mv /usr/bin/c++ /usr/bin/c++-arm
3)、进入c++所在目录执行vi c++,并填入如下内容保存:
#! /bin/sh
/usr/bin/c++-arm -fsigned-char "$@"
cd /usr/bin/
vi c++
4)、执行chmod +x c++给脚本添加执行权限
chmod +x c++
4移植分析
使用鲲鹏DevKit工具检查Kafka-0.8.2.2对应x86的安装包(kafka_2.10-0.8.2.2.tgz)或源码包是否有依赖x86的so文件,通过检查Kafka-2.10-0.8.2.2对应x86安装包发现有依赖的“liblz4-java.so,lz4-1.2.0.jar”和“libsnappyjava.so,snappy-java-1.1.1.7.jar”:
需要先编译lz4-1.2.0.jar和snappy-java-1.1.1.7.jar使其中包含的liblz4-java.so和libsnappyjava.so使能arm,编译过程见 “5 依赖库编译”。
5依赖库编译
5.1编译lz4-1.2.0.jar
1、从github网站下载源码并解压
wget https://github.com/lz4/lz4-java/archive/1.2.0.zip
unzip 1.2.0.zip
2、进入解压目录
cd lz4-java-1.2.0/
3、修改build.xml增加-fsigned-char
vi build.xml
增加如下内容
<compilerarg value="-fsigned-char"/>
4、修改ivy.xml中lz4-java编译后的版本号
vi ivy.xml
注释如下红框内注释内容,并增加如下行
<info organisation="net.jpountz.lz4" module="lz4" revision="1.2.0" />
5、执行ant编译命令进行编译
ant
报上图错误时执行ant ivy-bootstrap手动下载ivy-2.2.0.jar
【注】:如通过ant ivy-bootstrap无法下载ivy-2.2.0.jar,可以通过wget手动下载ivy-2.2.0.jar(wget http://repo1.maven.org/maven2/org/apache/ivy/ivy/2.2.0/ivy-2.2.0.jar);
6、重新执行ant编译
ant
7、查看编译后的lz4-1.2.0.jar
cd dist/
8、将编译的lz4-1.2.0.jar替换到本地maven仓和本地gradle仓
cp lz4-1.2.0.jar /root/.m2/repository/net/jpountz/lz4/lz4/1.2.0/
cp lz4-1.2.0.jar /gradleRepository/caches/modules-2/files-2.1/net.jpountz.lz4/lz4/1.2.0/cd301e9a481eae5b68c53267100aeca43b782b9f/
5.2编译snappy-java-1.1.1.7.jar
Snappy是Google开源的压缩/解压缩库,snappy-java封装了其接口
1)从github网站下载源码并解压
wget https://github.com/xerial/snappy-java/archive/1.1.1.7.zip
mv 1.1.1.7.zip snappy-java-1.1.1.7.zip
unzip snappy-java-1.1.1.7.zip
cd snappy-java-1.1.1.7
2)修改Makefile文件中snappy源码的下载路径:
vi Makefile
注释如下红框内注释行,并增加
curl -o$@ http://src.fedoraproject.org/repo/pkgs/snappy/snappy-1.1.1.tar.gz/8887e3b7253b22a31f5486bca3cbc1c2/snappy-$(VERSION).tar.gz
【注】因为默认的路径已经失效,需要如下使用新的下载路径:http://repository.timesys.com/buildsources/s/snappy/snappy-1.0.4/snappy-1.0.4.tar.gz
3)执行yum -y install libstdc++* glibc*安装相关依赖解决
yum -y install libstdc++* glibc*
4)修改sbt文件中sbt-launch.jar的下载地址
vim sbt
注释如下红框内注释行,并增加
declare sbt_launch_repo="http://dl.bintray.com/typesafe/ivy-releases\
4)执行make编译并查看编译后的snappy-java-1.1.1.7.jar
make
cd target/
5)将编译后的snappy-java-1.1.1.7.jar覆盖到本地maven仓和本地gradle仓
cp snappy-java-1.1.1.7.jar /root/.m2/repository/org/xerial/snappy/snappy-java/1.1.1.7/
cp snappy-java-1.1.1.7.jar /root/.m2/repository/org/xerial/snappy/snappy-java/1.1.1.7/
cp snappy-java-1.1.1.7.jar /gradleRepository/caches/modules-2/files-2.1/org.xerial.snappy/snappy-java/1.1.1.7/33b6965e9364145972035c30a45a996aad2bf789/
【注】编译过程报错参考https://bbs.huaweicloud.com/forum/thread-67215-1-1.html
6编译安装
1、从github网站下载源码并解压
wget https://archive.apache.org/dist/kafka/0.8.2.2/kafka-0.8.2.2-src.tgz
tar -zxvf kafka-0.8.2.2-src.tgz
2、进入解压目录
cd kafka-0.8.2.2-src/
3、修改build.gradle
vim build.gradle
增加如下内容:
ScalaCompileOptions.metaClass.daemonServer = true
ScalaCompileOptions.metaClass.fork = true
ScalaCompileOptions.metaClass.useAnt = false
ScalaCompileOptions.metaClass.useCompileDaemon = false
4、执行gradle -g /$UserHome/gradleRepository clean
gradle -g /$UserHome/gradleRepository clean
5、执行gradle -g /$UserHome/gradleRepository releaseTarGz -info
gradle -g /$UserHome/gradleRepository releaseTarGz -info
6、查看编译的文件
cd core/build/distributions/
【注】编译后有x86的jar依赖情况下,需要参考“5依赖库编译”解决依赖后重新编译kafka,直到没有依赖即可。
7验证
1、编译验证
使用鲲鹏DevKit工具检查编译后的kafka_2.11-1.1.0.tgz是否不再含有依赖的x86架构的so文件,如果还有依赖的x86架构的so文件,则需要继续完成对应jar包的编译,直到无依赖的x86架构的so文件后,再次编译该组件并通过鲲鹏DevKit工具检查确认,编译后的组件包不再有依赖的x86架构的so文件则表明编译成功。
2、功能验证
参考https://www.huaweicloud.com/kunpeng/software/kafka.html
8参考信息
1、https://www.huaweicloud.com/kunpeng/software/kafka.html
9FAQ
1、 执行gradle -g /$UserHome/gradleRepository clean出现“Could not create task ‘:core:compileScala’”报错,详细报错如下
解决方法:
vim build.gradle
增加如下内容:
ScalaCompileOptions.metaClass.daemonServer = true
ScalaCompileOptions.metaClass.fork = true
ScalaCompileOptions.metaClass.useAnt = false
ScalaCompileOptions.metaClass.useCompileDaemon = false