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

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...