当前位置: 首页 > 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]问题分析 首先确定其是…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 原创笔记&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;《数据结构第4章 数组和广义表》…...