如何在 Apple M1 上使用 Apache Pulsar

UnsatisfiedLinkError: /tmp/librocksdbjni5415780267701769402.so: /tmp/librocksdbjni541578026770176940 nacos启动报错/tmp/librocksdbjni541578026770176940 阅读详情

如何在 Apple M1 上使用 Apache Pulsar

从 RocksDB 说起

Apache Pulsar 将在 2.11 版本升级 RocksDB1( 6.10.2 -> 6.29.4.1),届时将原生支持在 Apple M1 上运行 Pulsar。

在这之前的 Pulsar 版本,因为依赖的 RocksDB 尚不支持 osx-arm64 架构,这会让 Bookie 在启动阶段报一个 UnsatisfiedLinkError错误,导致无法正确启动。

解压 org.rocksdb-rocksdbjni-6.10.2.jar ,可以看到仅有一个支持 osx-x86 架构的 librocksdbjni-osx.jnilib 包。

rocksdbjni-6.10.2
├── HISTORY-JAVA.md
├── META-INF
├── librocksdbjni-linux-aarch64-musl.so
├── librocksdbjni-linux-aarch64.so
├── librocksdbjni-linux-ppc64le-musl.so
├── librocksdbjni-linux-ppc64le.so
├── librocksdbjni-linux32-musl.so
├── librocksdbjni-linux32.so
├── librocksdbjni-linux64-musl.so
├── librocksdbjni-linux64.so
├── librocksdbjni-osx.jnilib
├── librocksdbjni-win64.dll
└── org

终于:

“RocksDB 6.29.4.1 has been released to Maven Central which should now work on M1 macs.”

Apache Pulsar 也很快做了跟进:

“Upgrade to newest version of RocksDb which has support for Mac with M1 architecture.”

在最新的 2.11.0-SNAPSHOT里,rocksdb 版本已经确定在 :<rocksdb.version>6.29.4.1</rocksdb.version> 。

解压 rocksdbjni-6.29.4.1.jar,可以看到增加了对 osx-arm64 对支持。

cksdbjni-6.29.4.1
├── HISTORY-JAVA.md
├── META-INF
├── librocksdbjni-linux-aarch64-musl.so
├── librocksdbjni-linux-aarch64.so
├── librocksdbjni-linux-ppc64le-musl.so
├── librocksdbjni-linux-ppc64le.so
├── librocksdbjni-linux-s390x-musl.so
├── librocksdbjni-linux-s390x.so
├── librocksdbjni-linux32-musl.so
├── librocksdbjni-linux32.so
├── librocksdbjni-linux64-musl.so
├── librocksdbjni-linux64.so
├── librocksdbjni-osx-arm64.jnilib
├── librocksdbjni-osx-x86_64.jnilib
├── librocksdbjni-win64.dll
└── org

推荐使用最新的 2.11 master 分支

所以在目前的时间点,在 M1 环境运行 Apache Pulsar 最佳的方案是使用最新的 Master 分支代码(2.11.0-SNAPSHOT)。不过目前还有点[兼容性问题][1]。

老版本如何使用

除此之外,我们可以分环境来说明,如何在 M1 下使用老版本 Apache Pulsar:

  1. 裸机环境(使用 arm64 JDK):可将 lib/rocksdbjni-6.10.2.jar 替换 rocksdbjni-6.29.4.1.jar,可兼容大部分消息场景(已简单测试 2.10、2.9.3 和 2.8.2 版本)。处理 Ledger 索引、Pulsar IO 和一些客户端可能会有问题。
  2. 裸机环境(使用 x86 JDK):可直接使用默认的 apache pulsar(推荐方案)。推荐使用 [sdkman][3]工具,通过配置 sdkman_rosetta2_compatible=true ,让本地 JDK 通过 rosetta2 来运行 Pulsar。配置步骤参考链接 [2]。
  3. Docker 环境(arm64):可自行制作 arm64 的 pulsar 镜像,注意也可以升级下 rocksdb。也可以催促下官方的 arm64 镜像[7]。
  4. Docker 环境(模拟 x86):推荐使用 [colima][4] 虚拟机工具来运行 x86 架构的 docker 运行时(例如 colima start --arch x86_64 --cpu 4 --memory 8 可开启一个本地的 x86 虚拟机),可支持 x86 架构的 pulsar 镜像运行。

arm 镜像制作示例

对于 arm64 的 pulsar 镜像,一个简单制作和使用示例如下,参考 [5]。

  1. 制作 Dockerfile:

    FROM --platform=arm64v8 adoptopenjdk:11-hotspot AS build
    # Prepare environment
    ENV PULSAR_HOME=/pulsar
    ENV PATH=$PULSAR_HOME/bin:$PATH
    RUN groupadd --system --gid=9999 pulsar && useradd --system --home-dir $PULSAR_HOME --uid=9999 --gid=pulsar pulsar
    WORKDIR $PULSAR_HOME
    
    ARG PULSAR_VERSION
    ENV PULSAR_VERSION 2.10.0
    # Install Pulsar
    RUN set -ex; \
      apt-get update && apt-get install -y wget; \
      PULSAR_VERSION=$PULSAR_VERSION; \
      wget -O pulsar.tgz "http://mirrors.ustc.edu.cn/apache/pulsar/pulsar-${PULSAR_VERSION}/apache-pulsar-${PULSAR_VERSION}-bin.tar.gz"; \
      tar -xf pulsar.tgz --strip-components=1; \
      mv lib/org.rocksdb-rocksdbjni-6.10.2.jar lib/org.rocksdb-rocksdbjni-6.10.2.jar.bak; \
      wget -O lib/rocksdbjni-6.29.4.1.jar https://maven.aliyun.com/repository/public/org/rocksdb/rocksdbjni/6.29.4.1/rocksdbjni-6.29.4.1.jar; \
      rm pulsar.tgz; \
      \
      chown -R pulsar:pulsar .;
    
    EXPOSE 6650 8080
    CMD [ "bin/pulsar","standalone" ]
    
  2. 编译命令(这里是我编译好的镜像 [6]):

    docker buildx build --platform linux/arm64 -t futeng/pulsar:2.10.0-rocksdbjni-6.29.4.1 .
    
  3. 启动命令:

    docker run -it -p 6650:6650  -p 8080:8080 \
    --mount source=pulsardata,target=/pulsar/data \
    --mount source=pulsarconf,target=/pulsar/conf \
    futeng/pulsar:2.10.0-rocksdbjni-6.29.4.1 \
    bin/pulsar standalone
    
  4. 查看架构

    root@29fba9e349d1:/pulsar# uname -a
    Linux 29fba9e349d1 5.10.104-linuxkit #1 SMP PREEMPT Thu Mar 17 17:05:54 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
    

对于在 M1 上运行 arm 容器,速度上还是有很大优势的。

鸣谢

感谢 @Yisheng Cai 安利 colima,感谢 @Yunze Xu 推荐 sdkman,感谢 @Kai Wang 介绍 Pulsar ARM 相关使用。

结束语

最完美的方案还是等待官方 2.11.0 版本的 release 啊!

[1]: https://github.com/apache/pulsar/issues/14961 "Pulsar IO integration tests"
[2]: https://pulsar.apache.org/docs/getting-started-standalone/#install-jdk-on-m1 "install x86 jdk on m1"
[3]: https://sdkman.io "Home - SDKMAN! the Software Development Kit Manager"
[4]: https://github.com/abiosoft/colima "Colima - container runtimes on macOS (and Linux) with minimal setup."
[5]: https://www.zhaojianyun.com/archives/run-pulsar-on-m1-mac "借助DOCKER让PULSAR可以在M1上原生运行"
[6]: https://hub.docker.com/r/futeng/pulsar/tags "docker pull futeng/pulsar:2.10.0-rocksdbjni-6.29.4.1"
[7]: https://github.com/apache/pulsar/issues/12944 "#12944 ARM based docker image"

  1. RocksDB 用来存储 ledger 的索引。 ↩︎

SpringBoot 整合 RocksDB SpringBoot整合RocksDB 一、maven依赖 二、RocksDBUtil.java 三、RocksDBController.java(测试) 四、测试结果 五、特别说明 阅读详情

相关推荐

OpenClaw工程化部署:一键上线与三端本地搭建实战指南

机器人智能体是融合大语言模型(LLM)、视觉语言模型(VLM)和运动规划的典型AI系统,其核心在于实现‘感知-决策-执行’闭环。理解该架构需掌握容器化部署、多模型协同推理及ROS2实时通信等关键技术原理。这类方案显著提升机器人任务泛化能力与开发效率,广泛应用于教育实验、工业分拣验证及集成商快速交付等场景。本文聚焦OpenClaw这一开源智能体框架,围绕阿里云一键部署、Windows/macOS/Linux三端本地化搭建、Docker+GPU环境适配、模型API生产级配置等真实工程问题,提供经23个落地项目验

weixin_30378623的博客 541

rocksdbjni 简介、中文文档、中英对照文档 下载

rocksdbjni 简介、中文文档、中英对照文档 下载;RocksDB JNI,包含linux32和linux64的.so文件(glibc和musl-libc), Mac OSX的jnilib文件,以及Windows x64的.dll文件。RocksDB 库提供了一个持久的键值存储。键和值是任意字节数组。键根据用户指定的比较器功能在键值存储中排序。该库由Facebook数据库工程团队维护,基于LevelDB,由Google的Sanjay Ghemawat和Jeff Dean组成。

寒水馨 · 轻量级技术文档 · hanshuixin.org 1726

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 406

JNI加载dll,cant find dependent libraries

1、可能是找不到动态库,用的时候把动态库拷贝到java运行目录下 2、如果加载A.dll,A.dll依赖B.dll。没有显示加载B.dll的话,也是不能通过。通过try catch,报错,找不到依赖项目,可以使用dependency walker查看依赖项目...

xinqingwuji的博客 2398

【信息科学与工程学】计算机科学与自动化 第二百三十三篇 凤凰架构02

① Firecracker 为每个 microVM 提供极简设备模型:virtio-net, virtio-blk, serial console。:① BB84:Alice 随机选择基矢(+ 或 ×)发送单光子,Bob 随机测量基矢,比对后保留一致位的子集作为原始密钥。:密度 1 EB/mm³;:① Parquet 文件:行组(Row Group)→ 列块(Column Chunk)→ 页(Page)。

weixin_49199313的博客 137

【信息科学与工程学】计算机科学与自动化—第十五篇 云计算 11 算法篇02

但若第一个应用需求40GB/s,第二个10GB/s,总需求50GB/s>40GB/s,第一个得32GB/s,第二个得8GB/s,不公平。但若分区负载不均(分区1-2各有100任务/s,分区3-4各有50任务/s),A负责1-2(200/s),B负责3-4(100/s),仍均衡。任务 τi​ 的计算需求 Wi​(CPU周期),在频率 f 下执行时间 Ti​=Wi​/f,能耗 Ei​=Pdyn​⋅Ti​=Ceff​⋅V2⋅f⋅(Wi​/f)=Ceff​⋅V2⋅Wi​。若 Mneed​>Mi​,需使用远程显存。

weixin_49199313的博客 108

JDK 17:从语法糖到生产契约的Java运行时重构

Java虚拟机(JVM)作为企业级应用的核心运行时,其版本演进已从语言特性驱动转向稳定性、可观测性与云原生适配三位一体的技术治理。ZGC垃圾收集器实现毫秒级停顿可控,Sealed Classes强化编译期类型安全,Pattern Matching则重塑类型判断范式——这些并非孤立新特性,而是构成现代Java服务SLA的技术基座。它们共同支撑高并发微服务的低延迟诉求、模块化隔离的运维边界,以及AOT编译与容器镜像优化的工程实践。本文深入解析JDK 17如何以13个JEP为支点,推动Java从开发友好走向生产就

circularr9834的博客 521

rocksdbjni-5.18.4-API文档-中文版.zip

赠送jar包:rocksdbjni-5.18.4.jar; 赠送原API文档:rocksdbjni-5.18.4-javadoc.jar; 赠送源代码:rocksdbjni-5.18.4-sources.jar; 赠送Maven依赖信息文件:rocksdbjni-5.18.4.pom; 包含翻译后的API文档:rocksdbjni-5.18.4-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.rocksdb:rocksdbjni:5.18.4; 标签:rocksdbjni、rocksdb、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

Trae Solo + DeepSeek V4 Pro:面向工程落地的本地化智能开发系统

智能编程助手正从‘代码补全’迈向‘工程级协作’——其核心在于上下文理解能力与大模型工程语义泛化能力的深度耦合。Trae 作为终端级语义操作系统,通过文件元数据、符号引用图与配置拓扑三层索引,实现项目全貌建模;DeepSeek V4 Pro 凭借128K长上下文、多轮逻辑链推理及结构化输出(JSON/YAML/SQL/TSX)能力,在真实CI/CD、Kubernetes、数据库迁移等工业场景中展现高确定性生成质量。该组合特别适用于中大型遗留系统重构、跨模块依赖分析与安全敏感型本地开发,为中高级工程师提供可控、

dengjuanshou7445的博客 415

手把手教你用示波器实测LVDS/CML信号:从波形解读到故障排查(附实测图)

本文详细介绍了如何使用示波器实测LVDS和CML信号,从波形解读到故障排查的全过程。涵盖差分探头选择、示波器配置、标准波形特征解读、眼图分析技巧以及高速信号捕获要点,帮助硬件工程师快速诊断和解决信号完整性问题。附实测图和案例,提升高速数字电路设计效率。

weixin_27215337的博客 200

io_uring vs epoll ,谁在网络编程领域更胜一筹?

简介:从定量分析的角度,通过量化 io_uring 和 epoll 两种编程框架下的相关操作的耗时,来分析二者的性能差异。 本文作者:王小光,「高性能存储技术SIG」核心成员。 背景 io_uring 在传统存储 io 场景已经证明其价值,但 io_uring 不仅支持传统存储 io,也支持网络 io。io_uring 社区有众多的开发者尝试将 io_uring 用于网络应用。我们之前也在《你认为 io_uring 只适用于存储 IO?大错特错!》中也探索过 io_uring 在网络场景的应用及其

阿里云云栖号 3035

从新闻事件到数据洞察:基于NLP与图谱分析的技术实践

在信息爆炸的时代,大规模实时数据处理和信息抽取成为关键技术挑战。其核心原理在于将非结构化文本转化为结构化数据,通过自然语言处理(NLP)技术识别实体、关系与事件,进而构建知识图谱以揭示深层关联。这项技术的价值在于提升信息处理效率与洞察深度,广泛应用于舆情监控、知识管理和竞品分析等场景。本文以新闻事件分析为例,详细演示了如何运用spaCy进行实体识别,并结合NetworkX构建实体共现网络,为开发者提供了一套从信息采集到可视化呈现的完整工程实践框架,帮助读者掌握处理多模态信息流和进行信息溯源的核心技能。

weixin_34280237的博客 590

Open3D 教程学习指南 (持续整理)

Open3D 是一个开源库,旨在为 3D 数据处理提供高效且易用的工具。它由 Intel 开发和维护,支持多种 3D 数据处理任务,如点云处理、3D 重建、几何处理和可视化等。

Chase Blog 5932

Python 学习 ---> 模块、pypi ( 模块库 )、添加模块路径

什么是 模块 在 Python 中,一个.py文件就是一个模块(Module)。模块的名字就是文件的名字。在模块内部,通过全局变量__name__可以获取模块名(即字符串) 模块作用 为了实现代码的复用,通常会把一些其他程序中重用的代码拿出来单独放在一个程序文件中,

freeking101的博客 3484

C++和蓝图1:Unreal Engine 中 C++ 与蓝图的桥梁

摘要: 本文介绍了Unreal Engine(UE)中C++与蓝图可视化脚本的结合机制,重点解析了宏系统(UCLASS、UPROPERTY、UFUNCTION)如何实现代码与蓝图的交互。相比Unity的纯C#脚本模式,UE的双轨制开发允许程序员用C++处理核心逻辑,同时通过蓝图让非程序员快速迭代。文章对比了两大引擎的编程范式差异,指出UE的反射系统和宏标记提供了更精细的控制,并给出了从Unity迁移到UE的具体思路。核心在于理解UE的混合编程优势:C++保证性能,蓝图提升开发效率,二者通过宏系统无缝协作。

qq_46348216的博客 1407

OpenStack 之 Epoxy版本 部署实战

OpenStack Epoxy 是 OpenStack 的第 31 个版本,其版本号为 2025.1,于 2025 年 4 月 2 日正式发布。

求知若渴,虚心若愚。 236

nacos服务启动报错: librocksdbini.dll:Can‘t find dependent libraries

dll资源库缺失或找不到, 是比较常见的问题, 本章节就是因为运行nacos服务时缺失对应的librocksdbini资源库信息, 实际就是缺少Visual C++., 选择对应版本进行下载.1)丶点击下载跳转路径。

spring_is_coming的博客 1462

IoT安全软件:Forescout二次开发_Forescout基础架构与原理

Forescout平台是一个集成了多种安全功能的综合解决方案,旨在帮助组织管理和保护其网络中的IoT设备。该平台通过自动发现、分类和监控网络中的设备,提供实时的安全可见性和控制。Forescout的核心优势在于其能够处理混合环境中的各种设备,包括传统IT设备、IoT设备和OT设备。Forescout平台由多个核心组件组成,每个组件负责特定的功能。了解这些组件的运作机制是进行二次开发的基础。假设我们需要定义一个策略,禁止所有厂商为XYZ的设备访问互联网。选择策略类型。

chenlz2007的博客 1965

rocksdb的jni加载

序 这里从源码学习一下rocksdb是如何加载本地类库的。 maven <!-- https://mvnrepository.com/artifact/org.rocksdb/rocksdbjni --> <dependency> <groupId>org.roc...

weixin_34315485的博客 2330

银河麒麟桌面系统 必会操作 | 加装双系统(麒麟桌面系统+Windows系统)的详细方法(含常见故障和解决方法)

装好麒麟桌面操作系统的电脑上、再加装Windows 操作系统的详细方法;和在已经装好Windows系统的电脑上、再加装麒麟桌面操作系统的详细方法;含加装双系统过程中常见问题的解决方法。

qq_33216613的博客 2419

27、自闭症儿童治疗与玩具设计研究

本研究探讨了自闭症儿童的治疗方法与玩具设计之间的关联,分析了游戏疗法、音乐疗法和职业疗法等在治疗中的应用,并介绍了多种针对自闭症儿童的治疗玩具案例。通过用户研究和多学科合作,提出了以Pro-Ability为核心的设计理念,开发了结合音乐疗法和精细运动训练的智能玩具套件。研究总结了当前成果与局限性,并展望了未来发展方向,旨在为自闭症儿童提供更有效的康复支持。

keras9composer的博客 211

nacos server 安装报错 macOS 10.12.6

macOS 10.12.6 安装 nacos server 安装报错

qq_32133573的博客 4249

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

RocksDB 官方安装指南中文翻译版

RocksDB 官方安装指南:https://github.com/facebook/rocksdb/blob/master/INSTALL.md。 我只是简单做了一个翻译哈,换句话说,我不生产文档,我只是官方文档的翻译工。英语水平有限,有些句子意思大概明白,但是翻译过来就不一定准确,如果发现不太准确的地方,请及时指明。 编译方式 注意:如果你打算在生产环境中使用 RocksDB,请不要使用 make 或者是 make all 的方式进行编译。因为这两种方式会编译出 debug 模式的 RocksDB,性

FishGoddess的博客 7459

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

解决Storm 运行时找不到librocksdbjni-win64.dll问题(纯干货)

按照上述方案操作后,Storm 本地集群应能正常启动,避免因缺失导致的初始化失败。

2401_83278400的博客 358

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

如何在滴滴云上编译RocksDB的jni

1、首先拉取 RocksDB 的最新源码 git clone (https://github.com/facebook/rocksdb.git) 2、紧接着我们需要使用 Maven 拉取 RocksDB 的依赖 根据官方文档,我们可以找到相应依赖的目录: https://search.maven.org/search?q=g:org.rocksdb 打开后我们可以看到 Maven 的依赖源码,如...

AI早餐汇 1224

服务器升级Nacos2.2.3报错、rocksdb报错问题处理

在将Nacos从2.0.4升级到2.2.3版本时,由于Nacos2.0.4存在反序列化漏洞,升级后发现Windows服务器上运行时出现rocksdb java.lang.UnsatisfiedLinkError错误,提示找不到依赖库。经过排查,成功解决了Nacos在Windows服务器上的运行问题。

Counter-Strike大牛 2500
上一篇: Kerberos 的安装和使用
下一篇: Pulsar 中使用 JWT 进行身份认证
futengft
博客等级 码龄16年 3粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值