当前位置: 首页 > news >正文

pulsar入门介绍

概述

Pulsar 是一个多租户、高性能的服务器到服务器消息传递解决方案。Pulsar 最初由 Yahoo 开发,由 Apache 软件基金会管理。

特点

Pulsar 的主要功能如下:

  • 原生支持 Pulsar 实例中的多个集群,可跨集群无缝地复制消息。
  • 非常低的发布和端到端延迟。
  • 无缝扩展到超过一百万个主题。
  • 一个简单的客户端 API,具有 Java、Go、Python 和 C++ 的绑定。
  • 主题的多种订阅类型(独占、共享和故障转移)。
  • 使用 Apache BookKeeper 提供的持久消息存储保证消息传递。 Pulsar Functions 是一个无服务器的轻量级计算框架,提供流原生数据处理能力。
  • 基于 Pulsar Functions 构建的无服务器连接器框架 Pulsar IO 可以更轻松地将数据移入和移出 Apache Pulsar。
  • 当数据老化时,分层存储将数据从热/热存储卸载到冷/长期存储(例如 S3 和 GCS)。

消息

Pulsar 建立在 publish-subscribe 模式(通常缩写为 pub-sub)之上。在此模式中,生产者将消息发布到主题;使用者订阅这些主题,处理传入的消息,并在处理完成后向代理发送确认。
在这里插入图片描述
创建订阅时,Pulsar 会保留所有消息,即使使用者已断开连接。只有当使用者确认所有这些消息都已成功处理时,才会丢弃保留的消息。

如果消息的使用失败,并且您希望再次使用此消息,那么可以启用消息重新传递机制以请求代理重新发送此消息。

主题

Pulsar 主题是一种存储单元,用于将消息组织到流中。与其他 pub-sub 系统一样,Pulsar 中的主题是命名通道,用于将消息从生产者传递给消费者。

不需要在 Pulsar 中显式创建主题。如果客户端尝试向尚不存在的主题写入或接收消息,Pulsar 会自动在主题名称中提供的命名空间下创建该主题。

命名空间

Pulsar 命名空间是主题的逻辑分组,也是租户中的逻辑命名法。租户通过管理 API 创建命名空间。

订阅

Pulsar 订阅是一个命名的配置规则,用于确定消息如何传递给消费者。这是由一群消费者建立的主题的租约。Pulsar 中有四种订阅类型:

  • exclusive:独占类型是仅允许单个使用者附加到订阅的订阅类型。如果多个消费者使用同一个订阅订阅一个主题,则会发生错误。请注意,如果主题已分区,则所有分区将由允许连接到订阅的单个使用者使用。
  • shared:Pulsar 中的共享订阅类型允许多个消费者附加到同一个订阅。消息在使用者之间以循环分布方式传递,并且任何给定的消息都只传递给一个使用者。当使用者断开连接时,将重新安排发送给它但未确认的所有消息,以发送给其余使用者。
  • failover:故障转移类型是多个使用者可以附加到同一订阅的订阅类型。为非分区主题或分区主题的每个分区选取主使用者并接收消息。当主使用者断开连接时,所有(未确认和后续)消息都将传递给下一个使用者。
  • key_shared:Pulsar 中的Key_Shared订阅类型允许多个消费者附加到同一个订阅。但与 Shared 类型不同的是,Key_Shared类型的消息在使用者之间分发,并且具有相同键或相同排序键的消息仅传递给一个使用者。无论消息被重新传递多少次,它都会传递给同一个使用者。
    在这里插入图片描述

架构

在这里插入图片描述

Pulsar 集群主要由三个核心组件构成,它们分别是:

  • ZooKeeper 集群:负责元数据存储、集群配置和协调工作。Pulsar 使用 Apache Zookeeper 来保存租户、命名空间以及其他全局一致的配置项。每个 Pulsar 集群通常都会有自己独立的 ZooKeeper 集群来保持内部配置和协调信息,如归属信息、Broker 负载报告以及 BookKeeper ledger 信息等。

  • Bookkeeper 集群(也称为 Bookie 集群):提供持久化消息存储机制,确保消息的可靠传递。BookKeeper 是 Pulsar 用来持久化消息的核心组件,它通过 ledger 信息来跟踪消息的存储状态。

  • Broker 集群:由 Pulsar 节点组成,是 Pulsar 系统的自身实例。Broker 负责处理客户端的连接请求,执行消息的发布和订阅操作。在 Pulsar 架构中,Broker 承担着消息路由和分发的关键角色。

元数据存储

Pulsar 元数据存储用于维护 Pulsar 集群的所有元数据,例如主题元数据、schema、broker 加载数据等。Pulsar 使用 Apache ZooKeeper 进行元数据存储、集群配置和协调。

配置存储

配置存储是一个 ZooKeeper 仲裁,用于特定于配置的任务,它维护 Pulsar 实例的所有配置,例如集群、租户、命名空间、分区主题相关配置等。

持久性存储

Pulsar 通过Apache BookKeeper提供的持久化消息存储机制来保证消息传递。这种机制确保了未确认的消息能够持久化存储,直至它们被消费者确认。

在 Pulsar 中,所有消息都有 N 个副本存储在磁盘上并且进行同步,以确保消息的持久性和可靠性。这样的设计使得 Pulsar 能够在发生故障时仍然保持数据的完整性和一致性。

此外,Pulsar 还引入了 Retention 机制,允许用户配置消息持久化的策略,从而避免消息无限期地占用存储空间。这些策略可以根据业务需求进行调整,以实现成本和性能之间的平衡。

部署Pulsar服务

1.版本依赖jdk版本要求

  • pulsar 版本 > 2.10
组件Java 版本
Broker17
Functions / IO17
CLI17
Java Client8 or 11 or 17
  • 2.8 <= pulsar 版本 <= 2.10
组件Java 版本
Broker11
Functions / IO11
CLI8 or 11
Java Client8 or 11
  • pulsar 版本 < 2.8
组件Java 版本
All8 or 11

2.下载安装包

下载安装包,可直接复制地址下载,命令如下:

wget https://archive.apache.org/dist/pulsar/pulsar-3.2.0/apache-pulsar-3.2.0-bin.tar.gz

上传到服务器,并解压,命令如下:

tar xvfz apache-pulsar-3.2.0-bin.tar.gz

进入pulsar文件夹:

cd apache-pulsar-3.2.0

目录如下:

目录名介绍
bin启动脚本和许多其他命令行工具
conf配置文件,包括broker.conf
libPulsar 使用的 JAR
examples示例
instancesPulsar函数

3.启动 Pulsar 独立集群

运行以下命令以启动独立的 Pulsar 集群:

bin/pulsar standalone

当 Pulsar 集群启动时,会创建以下目录:

目录描述
dataBookKeeper 和 RocksDB 创建的所有数据
logs所有服务器端日志

4.创建主题

要创建新主题,请运行以下命令:

bin/pulsar-admin topics create persistent://public/default/my-topic

5.写入消息

运行以下命令以生成消息:

bin/pulsar-client produce my-topic --messages 'Hello Pulsar!'

6.消费消息

运行以下命令以启动使用者并读回这些消息:

bin/pulsar-client consume my-topic -s 'my-subscription' -p Earliest -n 0

Earliest:意味着从最早的未使用消息开始使用。
-n 0:表示永久消耗

相关文章:

pulsar入门介绍

概述 Pulsar 是一个多租户、高性能的服务器到服务器消息传递解决方案。Pulsar 最初由 Yahoo 开发&#xff0c;由 Apache 软件基金会管理。 特点 Pulsar 的主要功能如下&#xff1a; 原生支持 Pulsar 实例中的多个集群&#xff0c;可跨集群无缝地复制消息。非常低的发布和端…...

Leetcode 3047. Find the Largest Area of Square Inside Two Rectangles

Leetcode 3047. Find the Largest Area of Square Inside Two Rectangles 1. 解题思路2. 代码实现 题目链接&#xff1a;3047. Find the Largest Area of Square Inside Two Rectangles 1. 解题思路 这道题倒是没啥特别的思路&#xff0c;直接暴力求解就是了&#xff0c;因此…...

ELK 简介安装

1、概念介绍 日志介绍 日志就是程序产生的&#xff0c;遵循一定格式&#xff08;通常包含时间戳&#xff09;的文本数据。 通常日志由服务器生成&#xff0c;输出到不同的文件中&#xff0c;一般会有系统日志、 应用日志、安全日志。这些日志分散地存储在不同的机器上。 日志…...

Linux 的交换空间(swap)是什么?有什么用?

目录 swap是什么&#xff1f;swap有什么用&#xff1f;swap使用典型场景如何查看你的系统是否用到交换空间呢&#xff1f;查看系统中swap in/out的情况 swap是什么&#xff1f; swap就是磁盘上的一块区域。它和Windows系统中的交换文件作用类似&#xff0c;但是它是一段连续的…...

消息中间件篇之RabbitMQ-消息不丢失

一、生产者确认机制 RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。消息发送到MQ以后&#xff0c;会返回一个结果给发送者&#xff0c;表示消息是否处理成功。 当消息没有到交换机就失败了&#xff0c;就会返回publish-confirm。当消息没有到达MQ时&…...

MongoDB中的TTL索引:自动过期数据的深入解析与使用方式

目录 一、TTL索引的深入原理二、TTL索引的使用方式三、TTL索引的限制与考虑因素四、优化TTL索引的策略五、总结 一、TTL索引的深入原理 TTL&#xff08;Time-To-Live&#xff09;索引在MongoDB中是一种特殊的索引&#xff0c;用于自动删除过期的文档。其核心原理在于MongoDB会…...

IPV6地址

技术背景&#xff1a;对IPV4做优化&#xff0c;比如地址长度128&#xff0c;简化了报文头部---快 ipv6地址 十六进制&#xff0c;简写前导0忽略&#xff0c;连续的0写成:: IPv6地址类型 1.单播 2.组播---接口有地址后&#xff0c;自动加入到一个组播里 3.任播---允许地址…...

解密API关键词搜索(淘宝京东1688)商品列表数据

API关键词搜索商品列表数据&#xff1a;赋能电商行业的新动力 随着电子商务的蓬勃发展&#xff0c;API&#xff08;应用程序接口&#xff09;关键词搜索商品列表数据在电商行业中的重要性日益凸显。这一数据资源不仅为消费者提供了便捷的购物体验&#xff0c;还为电商企业带来…...

wpf 简单实验 数据更新 列表更新

1.概要 1.1 需求 一个列表提供添加修改删除的功能&#xff0c;添加和修改的内容都来自一个输入框 1.2 要点 DisplayMemberPath"Zhi"列表.ItemsSource datalist;(列表.SelectedItem ! null)(列表.SelectedItem as A).Zhi 内容.Text;datalist.Remove((列表.Selec…...

【Flink精讲】Flink性能调优:内存调优

内存调优 内存模型 JVM 特定内存 JVM 本身使用的内存&#xff0c;包含 JVM 的 metaspace 和 over-head 1&#xff09; JVM metaspace&#xff1a; JVM 元空间 taskmanager.memory.jvm-metaspace.size&#xff0c;默认 256mb 2&#xff09; JVM over-head 执行开销&#xff1…...

Java 中常用的数据结构类 API

目录 常用数据结构API 对应的线程安全的api 高可用衡量标准 常用数据结构API ArrayList: 实现了动态数组&#xff0c;允许快速随机访问元素。 import java.util.ArrayList; LinkedList: 实现了双向链表&#xff0c;适用于频繁插入和删除操作。 import java.util.LinkedLis…...

JavaScript学习小记(1)基本数据结构(数组,字符串)

一个寒假确实过的很快&#xff0c;这个寒假除了调包调参突然心血来潮想学一下前端&#xff0c;学习过程比较平滑&#xff0c;我是自己找的技术文档&#xff0b;写代码实践来学习的&#xff0c;教程视频虽然详细&#xff0c;但是真的一点都看不动。 目录 JS如何定义变量的老旧的…...

python opencv实现车牌识别

目录 一:实现步骤: 二:实现车牌检测 一:实现步骤: 使用Python和OpenCV实现车牌识别的步骤大致可以分为以下两部分: 车牌检测: 读取需要进行车牌识别的图片。 对图像进行灰度化处理,可能还包括高斯模糊和灰度拉伸。 进行开运算,消除图像中的噪声。 将灰度拉伸后的图…...

K8S节点GPU虚拟化(vGPU)

vGPU实现方案 4paradigm提供了k8s-device-plugin,该插件基于NVIDIA官方插件(NVIDIA/k8s-device-plugin),在保留官方功能的基础上,实现了对物理GPU进行切分,并对显存和计算单元进行限制,从而模拟出多张小的vGPU卡。在k8s集群中,基于这些切分后的vGPU进行调度,使不同的容器…...

NLP 使用Word2vec实现文本分类

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.com/…...

【Redis学习笔记03】Java客户端

1. 初识Jedis Jedis的官网地址&#xff1a;https://github.com/redis/jedis 1.1 快速入门 使用步骤&#xff1a; 注意&#xff1a;如果是云服务器用户使用redis需要先配置防火墙&#xff01; 引入maven依赖 <dependencies><!-- 引入Jedis依赖 --><dependency&g…...

神经网络系列---激活函数

文章目录 激活函数Sigmoid 激活函数Tanh激活函数ReLU激活函数Leaky ReLU激活函数Parametric ReLU激活函数 &#xff08;自适应Leaky ReLU激活函数&#xff09;ELU激活函数SeLU激活函数Softmax 激活函数Swish 激活函数Maxout激活函数Softplus激活函数 激活函数 一般来说&#xf…...

python中continue的对比理解

# 使用while循环&#xff0c;输入1-10之间的数字&#xff0c;除7之外。 以下为代码对比&#xff1a; # 使用while循环&#xff0c;输入1-10之间的数字&#xff0c;除7之外。 # 第一种方式 num 0 while num < 10:num num 1if num 7:print("")else:print(num)…...

Amazon Generative AI | 基于 Amazon 扩散模型原理的代码实践之采样篇

以前通过论文介绍 Amazon 生成式 AI 和大语言模型&#xff08;LLMs&#xff09;的主要原理之外&#xff0c;在代码实践环节主要还是局限于是引入预训练模型、在预训练模型基础上做微调、使用 API 等等。很多开发人员觉得还不过瘾&#xff0c;希望内容可以更加深入。因此&#x…...

[服务器-数据库]MongoDBv7.0.4不支持ipv6访问

文章目录 MongoDBv7.0.4不支持ipv6访问错误描述问题分析错误原因解决方式 MongoDBv7.0.4不支持ipv6访问 错误描述 报错如下描述 Cannot connect to MongoDB.No suitable servers found: serverSelectionTimeoutMS expired: [failed to resolve 2408]问题分析 首先确定其是…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...