我作为一名程序员,体验了m1的mac后,感觉棒,不烫、安静、续航久。便入手了丐版air。 在日常开发中,我需要使用Pulsar服务。Pulsar是使用Java开发的,天生具有跨平台的特性。事与愿违,我在M1 mac上并不能启动Pulsar。
本地运行
在Pulsar官网,我们下载Pulsar 2.8.1的压缩包,在本地启动pulsar会遇到RocksDB JNI library报错。
java.io.IOException: Failed to load RocksDB JNI library at org.apache.bookkeeper.bookie.storage.ldb.KeyValueStorageRocksDB.<init>(KeyValueStorageRocksDB.java:93) ~[org.apache.bookkeeper-bookkeeper-server-4.12.0.jar:4.12.0] at org.apache.bookkeeper.bookie.storage.ldb.KeyValueStorageRocksDB.<init>(KeyValueStorageRocksDB.java:85) ~[org.apache.bookkeeper-bookkeeper-server-4.12.0.jar:4.12.0]它为什么会报错呢,从名字上看,RocksDB JNI应该是针对不同平台有不同的二进制文件。
在pulsar的lib目录中我找到了org.rocksdb-rocksdbjni-6.10.2.jar文件,解压这个文件,在目录中可以看到各种平台的二进制文件。
librocksdbjni-linux-aarch64-musl.solibrocksdbjni-linux-aarch64.solibrocksdbjni-linux-ppc64le-musl.solibrocksdbjni-linux-ppc64le.solibrocksdbjni-linux32-musl.solibrocksdbjni-linux32.solibrocksdbjni-linux64-musl.solibrocksdbjni-linux64.solibrocksdbjni-osx.jniliblibrocksdbjni-win64.dllarm64对应的平台简称是aarch64, mac系统对应的是osx。这些文件中没有包含mac arm64的二进制文件。
既然rocksdbjni这个版本不支持m1, 那我们就看看新版本中支不支持。我查看了rocksdbjni项目的GitHub,他们还没对m1做支持,项目上有等待合并的支持m1的PR,但我尝试构建了下,没有成功。
那么现在就不能在m1上使用了pulsar了吗?作为一个热衷于吃螃蟹的程序员,我不能放弃。
Docker 原生运行Pulsar
linux在arm64上早就跑起来了,日常见得多的是安卓手机的内核和树莓派。rocksdbjni包中是有librocksdbjni-linux-aarch64.so文件的,也就是支持linux/arm64。
我们何不自己打包一个linux/arm64的pulsar镜像呢?说干就干。Dockerflie走起。
FROM adoptopenjdk:8-jdk-hotspot# Prepare environmentENV PULSAR_HOME=/pulsarENV PATH=$PULSAR_HOME/bin:$PATHRUN groupadd --system --gid=9999 pulsar && useradd --system --home-dir $PULSAR_HOME --uid=9999 --gid=pulsar pulsarWORKDIR $PULSAR_HOME
ARG PULSAR_VERSIONENV PULSAR_VERSION 2.8.1# Install PulsarRUN set -ex; \ apt-get update && apt-get install -y wget; \ PULSAR_VERSION=$PULSAR_VERSION; \ wget -O pulsar.tgz "https://archive.apache.org/dist/pulsar/pulsar-${PULSAR_VERSION}/apache-pulsar-${PULSAR_VERSION}-bin.tar.gz"; \ tar -xf pulsar.tgz --strip-components=1; \ rm pulsar.tgz; \ \ chown -R pulsar:pulsar .;
EXPOSE 6650 8080CMD [ "bin/pulsar","standalone" ]docker构建镜像,run起来,Pulsar成功启动,并且启动速度比模拟amd64快了三倍起。赞~
大家可以自己构建或者使用我构建好的镜像docker pull jianyun8023/pulsar:2.8.1来使用Pulsar。
结语
M1作为苹果的新产品,性能不错,续航好,还解决了macbook的梦幻单管散热问题。但新的平台,在软件原生适配上还有很长时间。在日常使用些专业软件,多多少少还是会遇到问题。凭借自己能力,用docker + linux-arm64镜像解决了Pulsar不能使用问题,还是非常开心的。