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

Apache Pulsar的分布式集群模式构建

1. 准备环境

6台带jdk8的Linux服务器(CentOS7为例)

ip分别为:

主机名IP地址
zookeeper1192.168.8.101
zookeeper2192.168.8.102
zookeeper3192.168.8.103
pulsar1192.168.8.108
pulsar2192.168.8.109
pulsar3192.168.8.110

2. 下载Pulsar最新安装包

下载地址:Apache Pulsar

3. 构建

搭建Pulsar集群全少需要3个组件:ZooKeeper集群、BookKeeper集群和broker集群(Broker是Pulsar的自身实例)。这
三人集群组件如下:

  • ZooKeeper集群(3个ZooKeeper节点组成)
  • bookie集群(也称为BookKeeper集群,3个BookKeeper节点组成)
  • broker集群(3个Pulsar节点组成)

Pulsar的安装包已包含了搭建集群所需的各个组件库。无需单独下载ZooKeeper安装包和BookKeeper安装包。(在实际
中,zookeeper我们并不仅仅应用在pulsar上,包括HBase等其他的组件也需要依赖,所以我们此处zookeeper使用外置zk集群环境

注意:如果是在内网测试环境搭建集群,为了避免防火墙造成端口开启繁琐,可以关闭服务器防火墙

第一步: 将下载的pulsar安装包上传到linux服务器, 并解压

cd /usr/local
上传apache-pulsar-2.8.1-bin.tar.gztar -zxvf apache-pulsar-2.8.1-bin.tar.gzmv apache-pulsar-2.8.1 pulsar

第二步: 修改bookkeeper集群配置文件

cd /usr/local/pulsar/conf/
vim bookkeeper.conf修改其第56行:修改本地ip地址(版本不一样位置可能不一样)
advertisedAddress=pulsar1
修改其39行:(版本不一样位置可能不一样)
journalDirectory=/usr/local/pulsar/tmp/journal
修改其389行:(版本不一样位置可能不一样)
ledgerDirectories=/usr/local/pulsar/tmp/ledgers
修改617行:(版本不一样位置可能不一样)
zkServers=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181

第三步: 修改broker集群的配置文件

cd /usr/local/pulsar/conf/
vim broker.conf修改第98行:修改集群的名称(版本不一样位置可能不一样)
clusterName=pulsar-cluster
修改第23行:配置zookeeper地址(版本不一样位置可能不一样)
zookeeperServers=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
修改第26行:配置zookeeper地址(版本不一样位置可能不一样)
configurationStoreServers=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
修改第44行:更改为本地ip地址(版本不一样位置可能不一样)
advertisedAddress=pulsar1

第四步: 将配置好bookies目录和brokers目录发送到第二台和第三台

cd /usr/local
scp -r pulsar/ pulsar2:$PWD
scp -r pulsar/ pulsar3:$PWD

第五步: 修改第二台和第三台的broker的地址和bookies地址

pulsar2:
cd /usr/local/pulsar/conf/
vim bookkeeper.conf
修改其第56行:修改本地ip地址
advertisedAddress=pulsar2vim broker.conf
修改第44行:更改为本地ip地址
advertisedAddress=pulsar2第三台节点:都更改为对应IP地址或者主机名即可

4. 启动

第一步: 首先启动zookeeper集群

启动命令在zookeeper1启动脚本中,三个同时启动
启动后注意查看状态,必须看到一个leader和两个follower才可以使用

第二步: 初始化元数据(此操作, 仅需要初始化一次即可)

此操作, 仅需要初始化一次即可

首先初始化Pulsar集群元数据:
cd /usr/local/pulsar/bin
./pulsar initialize-cluster-metadata \
--cluster pulsar-cluster \
--zookeeper zookeeper1:2181,zookeeper2:2181,zookeeper3:2181 \
--configuration-store zookeeper1:2181,zookeeper2:2181,zookeeper3:2181 \
--web-service-url http://pulsar1:8080,pulsar2:8080,pulsar3:8080 \
--web-service-url-tls https://pulsar1:8443,pulsar2:8443,pulsar3:8443 \
--broker-service-url pulsar://pulsar1:6650,pulsar2:6650,pulsar3:6650 \
--broker-service-url-tls pulsar+ssl://pulsar1:6651,pulsar2:6651,pulsar3:6651

接着初始化bookkeeper集群:若出现提示输入Y/N:请输入Y

./bookkeeper shell metaformat

第三步: 启动bookkeeper服务

cd /usr/local/pulsar/bin
./pulsar-daemon start bookie

注意:三个节点都需要依次启动

验证是否启动:可三台都检测

./bookkeeper shell bookiesanity

提示:
Bookie sanity test succeeded 认为启动成功

第四步: 启动Broker

cd /usr/local/pulsar/bin
./pulsar-daemon start broker

注意:三个节点都需要依次启动

检测是否启动:

./pulsar-admin brokers list pulsar-cluster

提示:

[root@node1 bin]# ./pulsar-admin brokers iist pulsar-cluster
"node1.itcast.cn:8080"
"node2.itcast.cn:8080"
"node3.itcast.cn:8080"

认为启动成功

5. 测试

在pulsar的bin目录下, 专门提供了一个pulsar-client的客户端工具, Pulsar-Clinet工具允许使用者在运行的集群中消费并发送消息到
Pulsar Topic中

1:模拟开启消费者监听数据

./pulsar-client consume persistent://public/default/test -s "consumer-test"

2:模拟生产一条数据

./pulsar-client produce persistent://public/default/test --messages "hello-pulsa"

6. Apache Pulsar的可视化监控部署

第一步: 下载Pulsar-Manager

下载地址:

https://dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.3.0/apache-pulsar-manager-0.3.0-bin.tar.gz

第二步: 上传到服务器, 并解压

cd /usr/local
上传apache-pulsar-manager-0.3.0-bin.tar.gz
解压操作:
tar -zxf apache-pulsar-manager-0.3.0-bin.tar.gzcd /usr/local/pulsar-manager
接着再次解压:
tar -xvf pulsar-manager.tar

第三步: 拷贝dist包到 pulsar-manager目录下并更名为ui

cd /usr/local/pulsar-manager/pulsar-manager
cp -r ../dist ui

第四步: 启动Pulsar

cd /usr/local/pulsar-manager/pulsar-manager
./bin/pulsar-manager

第五步: 初始化超级用户密码(只用执行一次)

CSRF_TOKEN=$(curl http://192.168.8.108:7750/pulsar-manager/csrf-token)
curl \-H 'X-XSRF-TOKEN: $CSRF_TOKEN' \-H 'Cookie: XSRF-TOKEN=$CSRF_TOKEN;' \-H "Content-Type: application/json" \-X PUT http://192.168.8.108:7750/pulsar-manager/users/superuser \-d '{"name": "pulsar", "password": "pulsar", "description": "test", "email": "username@test.org"}'

第六步: 访问Pulsar UI

http://192.168.8.108:7750/ui/index.html

用户名: pulsar
密码: pulsar

Apache Pulsar的可视化监控基本使用

第一步: 点击 + new Enirconment 构建新环境,连接pulsar

Environment Name

pulsar-cluster

Service URL

http://192.168.8.108:8080

Bookie URL

http://192.168.8.108:6650

相关文章:

Apache Pulsar的分布式集群模式构建

1. 准备环境 6台带jdk8的Linux服务器(CentOS7为例) ip分别为: 主机名IP地址zookeeper1192.168.8.101zookeeper2192.168.8.102zookeeper3192.168.8.103pulsar1192.168.8.108pulsar2192.168.8.109pulsar3192.168.8.110 2. 下载Pulsar最新安…...

第三百八十六回

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了Snackbar Widget相关的内容,本章回中将介绍TimePickerDialog Widget.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里说的TimePickerDialog是一种弹出窗口,只不过窗口的内容固定显示…...

Java中介者模式剖析及使用场景

中介者模式 一、介绍二、智能家居系统项目实现三、总结1.优点2.缺点3.使用经验4.Spring框架类似使用思想 一、介绍 介者模式是一种行为型设计模式,它允许对象之间通过一个中介者对象进行通信,而不是直接相互引用。将多对多的关系转化为一对多的关系&…...

ElevenLabs用AI为Sora文生视频模型配音 ,景联文科技提供高质量真人音频数据集助力生成逼真音效

随着Open AI公司推出的Sora文生视频模型惊艳亮相互联网,AI语音克隆创企ElevenLabs又为Sora的演示视频生成了配音,所有的音效均由AI创造,与视频内容完美融合。 ElevenLabs的语音克隆技术能够从一分钟的音频样本中创建逼真的声音。为了实现这一…...

Go语言基础

Go的数据类型定义 //运行第一个程序package main func main(){print("Hello World") }在GO语言中,一个程序只能有一个main包,对应只能有一个main方法,若无法满足这个条件,编译时将会报错。注释方式与PHP相同 import的使…...

IOS覆盖率报告info文件解读

一,IOS覆盖率报告的生成 在做前端精准测试的时候,对于iOS端,通常会做如下操作: (1)合并覆盖率数据 如下操作: xcrun llvm-profdata merge coverage_file1657885040728.profraw coverage_fil…...

爬虫实战——scrapy框架爬取多张图片

scrapy框架的基本使用,请参考我的另一篇文章:scrapy框架的基本使用 起始爬取的网页如下: 点击每张图片,可以进入图片的详情页,如下: 代码实现: 项目文件结构如下 img_download.py文件代码 im…...

LLVM TableGen 系统学习笔记

Basic TableGen 系统可以帮助记录领域特定的信息。它也可以认为是一种小型的编译系统。 TableGen 责负分析文件, 分析结果交给领域特定的后端进行处理。 重要的概念 records 一个 record 有一个独立的名称,一系列值和一系列父类。 它保存了特定领域…...

基于stm32的流水灯设计

1基于stm32的流水灯设计[proteus仿真] 速度检测系统这个题目算是课程设计和毕业设计中常见的题目了,本期是一个基于51单片机的自行车测速系统设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】,赞赏任意文章 2¥&#xff0c…...

kotlin图片合成和压缩

kotlin图片合成和压缩 之前的方法是继承AsyncTask 在doInBackground 里面去做压缩的操作&#xff0c;然后用 publishProgress 切到主线程里面更新 新方法是在协程里的去做 class ImageService {private fun getSumWidths(bitmaps: ArrayList<Bitmap>): Int {var sumWid…...

Java学习笔记004——接口概念理解及意义

一个类中有抽象方法&#xff0c;则必须声明为abstract&#xff08;做为抽象类&#xff09;&#xff0c;抽象类不能实例化。子类继承抽象类&#xff0c;必须对所有的抽象方法重写&#xff0c;否则依然有抽象方法&#xff0c;还是抽象的&#xff0c;无法实例化。故抽象类常做为基…...

MT笔试题

前言 某团硬件工程师的笔试题&#xff0c;个人感觉题目的价值还是很高的&#xff0c;分为选择题和编程题&#xff0c;选择题考的是嵌入式基础知识&#xff0c;编程题是两道算法题&#xff0c;一道为简单难度&#xff0c;一道为中等难度 目录 前言选择题编程题 选择题 C语言中变…...

50道SQL面试题

50道SQL面试题 有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家 环境 -- ---------------------------- -- Table structure for teacher -- ---------------------------- DROP TABLE IF EXISTS teacher; CREATE TABLE teacher (t_id varchar(20) …...

2024蓝桥杯每日一题(双指针)

一、第一题&#xff1a;牛的学术圈 解题思路&#xff1a;双指针贪心 仔细思考可以知道&#xff0c;写一篇综述最多在原来的H指数的基础上1&#xff0c;所以基本方法可以是先求出原始的H指数&#xff0c;然后分类讨论怎么样提升H指数。 【Python程序代码】 n,l map(int,…...

Android 开发过程中常见的内存泄漏场景分析

场景1 Static变量存储上下文环境Context public class ClassName {// 定义1个静态变量private static Context mContext;//... // 引用的是Activity的contextmContext context; // 当Activity需销毁时&#xff0c;由于mContext 静态 & 生命周期 应用程序的生命周期&…...

Codeforces-1935E:Distance Learning Courses in MAC(思维)

E. Distance Learning Courses in MAC time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output The New Year has arrived in the Master’s Assistance Center, which means it’s time to introduce a new feature…...

ZooKeeper和Diamond有什么不同

本文主要是讨论下两个类似产品&#xff1a;ZooKeeper和Diamond在配置管理这个应用场景上的异同点。 Diamond&#xff0c;顾名思义&#xff0c;寄寓了开发人员对产品稳定性的厚望&#xff0c;希望它像钻石一样&#xff0c;提供稳定的配置访问。Diamond是淘宝网Java中间件团队的核…...

三、N元语法(N-gram)

为了弥补 One-Hot 独热编码的维度灾难和语义鸿沟以及 BOW 词袋模型丢失词序信息和稀疏性这些缺陷&#xff0c;将词表示成一个低维的实数向量&#xff0c;且相似的词的向量表示是相近的&#xff0c;可以用向量之间的距离来衡量相似度。 N-gram 统计语言模型是用来计算句子概率的…...

QML 3D入门知识路线

目前使用的版本 v5.14.0 模块导入 使用QML 3D时需要 import Qt3D.Core 2.14 核心模块类 V6以上的版本已经发布&#xff0c;所以有很多module会发生变化&#xff0c;主要有核心module、输入、逻辑、渲染、动画和扩展module&#xff0c;以及2D/3D场景模块 类名 能…...

蓝牙系列五:开源蓝牙协议BTStack框架代码阅读(1)

蓝牙学习系列,借鉴卫东上老师的蓝牙视频教程。 BTStack协议栈学习。首先来看一下,对于硬件操作,它是如何来进行处理的。在上篇文章中曾说过,在main函数里面它会调用硬件相关的代码,调用操作系统相关的代码。在BTStack中,可以搜索一下main.c,将会发现有很多main.c,都是…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录&#xff0c;这个目录下存放着许多可执行文件。与其他系统的可执行文件类似&#xff0c;这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中&#xff0c;用…...

FTXUI::Dom 模块

DOM 模块定义了分层的 FTXUI::Element 树&#xff0c;可用于构建复杂的终端界面&#xff0c;支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...

SOC-ESP32S3部分:30-I2S音频-麦克风扬声器驱动

飞书文档https://x509p6c8to.feishu.cn/wiki/SKZzwIRH3i7lsckUOlzcuJsdnVf I2S简介 I2S&#xff08;Inter-Integrated Circuit Sound&#xff09;是一种用于传输数字音频数据的通信协议&#xff0c;广泛应用于音频设备中。 ESP32-S3 包含 2 个 I2S 外设&#xff0c;通过配置…...

Spring Boot 与 Kafka 的深度集成实践(二)

3. 生产者实现 3.1 生产者配置 在 Spring Boot 项目中&#xff0c;配置 Kafka 生产者主要是配置生产者工厂&#xff08;ProducerFactory&#xff09;和 KafkaTemplate 。生产者工厂负责创建 Kafka 生产者实例&#xff0c;而 KafkaTemplate 则是用于发送消息的核心组件&#x…...