当前位置:首页 > 科技  > 软件

Pulsar3.0 升级指北,你学会些什么?

来源: 责编: 时间:2023-12-25 09:34:49 370观看
导读Pulsar3.0 介绍Pulsar3.0 是 Pulsar 社区推出的第一个 LTS 长期支持版本。图片如图所示,LTS 版本会最长支持到 36 个月,而 Feature 版本最多只有六个月;类似于我们使用的 JDK11,17,21 都是可以长期使用的;所以也推荐大家

Pulsar3.0 介绍

Pulsar3.0 是 Pulsar 社区推出的第一个 LTS 长期支持版本。vxO28资讯网——每日最新资讯28at.com

图片图片vxO28资讯网——每日最新资讯28at.com

如图所示,LTS 版本会最长支持到 36 个月,而 Feature 版本最多只有六个月;类似于我们使用的 JDK11,17,21 都是可以长期使用的;所以也推荐大家都升级到 LTS 版本。vxO28资讯网——每日最新资讯28at.com

作为首个 LTS 版本,3.0 自然也是自带了许多新特性,这个会在后续介绍。vxO28资讯网——每日最新资讯28at.com

升级指南

先来看看升级指南:vxO28资讯网——每日最新资讯28at.com

图片图片vxO28资讯网——每日最新资讯28at.com

在官方的兼容表中会发现:不推荐跨版本升级。vxO28资讯网——每日最新资讯28at.com

也就是说如果你现在还在使用的是 2.10.x,那么推荐是先升级到 2.11.x 然后再升级到 3.0.x.vxO28资讯网——每日最新资讯28at.com

而且根据我们的使用经验来看,首个版本是不保险的,即便是 LTS 版本;所以不推荐直接升级到 3.0.0,而是更推荐 3.0.1+,这个小版本会修复 3.0 所带来的一些 bug。vxO28资讯网——每日最新资讯28at.com

先讲一下我们的升级流程,大家可以用做参考。vxO28资讯网——每日最新资讯28at.com

升级前准备

根据我们的使用场景,为了以防万一,首先需要将我们的插件依赖升级到对应的版本。vxO28资讯网——每日最新资讯28at.com

图片图片vxO28资讯网——每日最新资讯28at.com

其实简单来说就是更新下依赖,然后再重新打包,在后续的流程进行测试。vxO28资讯网——每日最新资讯28at.com

预热镜像

之后是预热镜像,我们使用 harbor 搭建了自己的 docker 镜像仓库,这样在升级重启镜像的时候可以更快的从内网拉取镜像。vxO28资讯网——每日最新资讯28at.com

毕竟一个 pulsar-all 的镜像也不小,尽量的缩短启动时间。vxO28资讯网——每日最新资讯28at.com

预热的过程也很简单:vxO28资讯网——每日最新资讯28at.com

docker pull apachepulsar/pulsar-all:3.0.1docker tag apachepulsar/pulsar-all:3.0.1 harbor-private.xx.com/pulsar/pulsar-all:3.0.1docker image push harbor-private.xx.com/pulsar/pulsar-all:3.0.1

之后升级的时候就可以使用私服的镜像了。vxO28资讯网——每日最新资讯28at.com

功能测试

我这边有写了一个 cli 可以帮我快速创建或升级一个集群,然后触发我所编写的功能测试。vxO28资讯网——每日最新资讯28at.com

./pulsar-upgrade-cli upgrade pulsar-test ./charts/pulsar --version x.x.x -f charts/pulsar/values.yaml -n pulsar-test

这个 cli 很简单,一共就做三件事:vxO28资讯网——每日最新资讯28at.com

  • 使用 helm 接口升级集群
  • 等待所有的 Pod 都升级成功
  • 触发功能测试

之后的效果如下:vxO28资讯网——每日最新资讯28at.com

图片图片vxO28资讯网——每日最新资讯28at.com

主要就是覆盖了我们的使用场景,都跑通过之后才会走后续的流程。vxO28资讯网——每日最新资讯28at.com

运行监控

图片图片vxO28资讯网——每日最新资讯28at.com

之后会启动一个 200 左右的并发生产和消费数据,模拟线上的使用情况,会一直让这个任务跑着,大概一晚上就可以了,第二天通过监控查看:vxO28资讯网——每日最新资讯28at.com

  • 应用有无异常日志
  • 流量是否正常
  • 各个组件的内存占用
  • 写入延迟等信息

升级步骤

组件的升级步骤这里参考了官方指南:https://pulsar.apache.org/docs/3.1.x/administration-upgrade/#upgrade-zookeeper-optionalvxO28资讯网——每日最新资讯28at.com

图片图片vxO28资讯网——每日最新资讯28at.com

  • 升级ZK
  • 关闭auto recovery
  • 升级Bookkeeper
  • 升级Broker
  • 升级Proxy
  • 开启auto recovery

只要一步步按照这个流程走,问题不大,哪一步出现问题后需要及时回滚,回滚流程参考下面的回滚部分。vxO28资讯网——每日最新资讯28at.com

同时在升级过程中需要一直查看 broker 的 error 日志,如果有明显的不符合预期的日志一定要注意。vxO28资讯网——每日最新资讯28at.com

在升级  bookkeeper 的时候,broker 可能会出现 bk 连接失败的异常,这个可以不用在意。vxO28资讯网——每日最新资讯28at.com

线上验证

都升级完后就是线上业务验证环节了:vxO28资讯网——每日最新资讯28at.com

  • [x] 查看监控面板,是否有明显的流量、内存、延迟的异常指标。✅ 2023-12-24
  • [x] topic 元数据完整性验证:这个是因为我们这次升级出了一个 topic 被删除的 bug,所以需要重点验证下;这部分会在下次详细分析。✅ 2023-12-24
  • [x] 查看业务消息收发有无异常 ✅ 2023-12-24
  • [x] 链路查询是否正常,我们有一个消息链路查询的页面,主要是使用 Pulsar-SQL 和 broker-interceptor 实现的。✅ 2023-12-24

异常回滚

当出现异常的时候需要立即回滚,这里的异常一般就是消息收发异常,客户端掉线等。vxO28资讯网——每日最新资讯28at.com

经过我的测试 3.0.x 的存储和之前的版本是兼容的,所以 bookkeeper 都能降级其他的组件就没啥可担心的了。vxO28资讯网——每日最新资讯28at.com

需要降级时直接将所有组件降级为上一个版本即可。vxO28资讯网——每日最新资讯28at.com

灾难恢复

因为是从 2.x 升级到 3.x 也是涉及到了跨大版本,所以也准备了灾难恢复的方案。vxO28资讯网——每日最新资讯28at.com

比如极端情况下升级失败,所有数据丢失的情况。vxO28资讯网——每日最新资讯28at.com

整个灾难恢复的主要目的就是恢复后的集群对外提供的域名不发生变化,同时所有的客户端可以自动重连上来,也就是最坏的情况下所有的数据丢了可以接受,但不能影响业务正常使用。vxO28资讯网——每日最新资讯28at.com

所以我们的流程如下:vxO28资讯网——每日最新资讯28at.com

备份 topic

@SneakyThrows  @Test  void backup(){      List<String> topicList = pulsarAdmin.topics().getPartitionedTopicList("tenant/namespace");      log.info("topic size={}",topicList.size());      // create a custom thread pool      CopyOnWriteArrayList<TopicMeta> dataList = new CopyOnWriteArrayList<>();      ExecutorService customThreadPool = Executors.newFixedThreadPool(10);      for (String topicName : topicList) {          customThreadPool.execute(()-> {              PartitionedTopicMetadata metadata;              try {                  metadata = pulsarAdmin.topics().getPartitionedTopicMetadata(topicName);                  TopicMeta topicMeta = new TopicMeta();                    // backup topic                  topicMeta.setName(topicName);                  topicMeta.setPartition(metadata.partitions);                    // backup permission                  Map<String, Set<AuthAction>> permissions = pulsarAdmin.topics().getPermissions(topicName);                  topicMeta.setPermissions(permissions);                    // back sub                  List<String> subscriptions = new ArrayList<>();                  PartitionedTopicStats topicStats = pulsarAdmin.topics().getPartitionedStats(topicName, true);                  topicStats.getSubscriptions().forEach((k,v)-> subscriptions.add(k));                  topicMeta.setSubscriptions(subscriptions);                    dataList.add(topicMeta);              } catch (PulsarAdminException e) {                  throw new RuntimeException(e);              }        });    }      customThreadPool.shutdown();      while (!customThreadPool.isTerminated()) {      }      log.info("{}",dataList.size());      log.info("{}",JSONUtil.toJsonStr(dataList));  }// TopicMetaData@Data  public class TopicMeta {      private String name;      private int partition;      Map<String, Set<AuthAction>> permissions;      List<String> subscriptions = new ArrayList<>();  }

第一步是备份 topic:vxO28资讯网——每日最新资讯28at.com

  • topic 主要是名称和分区数量
  • 备份权限
  • 备份 topic 的订阅者

公私钥备份

因为我们客户端使用了 JWT 验证,所有为了使得恢复的 Pulsar 集群可以让客户端无缝切换到新集群,因此必须得使用相同的公私钥。vxO28资讯网——每日最新资讯28at.com

这个其实比较简单,我们使用的是 helm 安装的集群,所以只需要备份好 Secret 即可。vxO28资讯网——每日最新资讯28at.com

apiVersion: v1  data:    PRIVATEKEY: XXX    PUBLICKEY: XXX kind: Secret  metadata:    name: pulsar-token-asymmetric-key    namespace: pulsar  type: Opaque  # 还有几个 superUser 的 Secret

数据恢复

创建新集群

首先使用 helm 重新创建一个新集群:vxO28资讯网——每日最新资讯28at.com

./scripts/pulsar/prepare_helm_release.sh -n pulsar -k pulsarhelm install /    --values charts/pulsar/values.yaml /    --set namespace=pulsar/      --set initialize=true /      pulsar ./charts/pulsar -n pulsar
恢复公私钥

直接使用刚才备份的公私钥覆盖到新集群即可。vxO28资讯网——每日最新资讯28at.com

恢复namespace

进入 toolset pod 创建需要使用的 tenant/namespacevxO28资讯网——每日最新资讯28at.com

k exec -it pulsar-toolset-0 -n pulsar bashbin/pulsar-admin tenants create tenantbin/pulsar-admin namespaces create tenant/namespace
元数据恢复

之后便是最重要的元数据恢复了:vxO28资讯网——每日最新资讯28at.com

@SneakyThrows  @Test  void restore() {      PulsarAdmin pulsarAdmin = PulsarAdmin.builder().serviceHttpUrl("http://url:8080")              .authentication(AuthenticationFactory.token(token))              .build();      Path filePath = Path.of("restore-ns.json");      String fileContent = Files.readString(filePath);      List<TopicMeta> topicMetaList = JSON.parseArray(fileContent, TopicMeta.class);      ExecutorService customThreadPool = Executors.newFixedThreadPool(50);      for (TopicMeta topicMeta : topicMetaList) {          customThreadPool.execute(() -> {              // Create topic              try {                  pulsarAdmin.topics().createPartitionedTopic(topicMeta.getName(), topicMeta.getPartition());              } catch (PulsarAdminException e) {                  log.error("Create topic error");              }              // Create sub              for (String subscription : topicMeta.getSubscriptions()) {                  try {                      pulsarAdmin.topics().createSubscription(topicMeta.getName(), subscription, MessageId.latest);                  } catch (PulsarAdminException e) {                      log.error("createSubscription error");                  }            }              // Grant permission              topicMeta.getPermissions().forEach((role, authActions) -> {                  permission(pulsarAdmin, topicMeta.getName(), role, authActions);              });              log.info("topic:{} restore success", topicMeta.getName());              });    }      customThreadPool.shutdown();      while (!customThreadPool.isTerminated()) {      }    log.info("restore success");  }private synchronized void permission(PulsarAdmin pulsarAdmin, String topic, String role, Set<AuthAction> authActions) {      try {          pulsarAdmin.topics().grantPermission(topic, role, authActions);      } catch (PulsarAdminException e) {          log.error("grantPermission error", e);      }  }

流程和备份类似:vxO28资讯网——每日最新资讯28at.com

  • 创建分区 topic
  • 创建订阅者
  • 授权角色信息

因为授权接口限制了并发调用,所有需要加锁,导致整个恢复的流程就会比较慢。vxO28资讯网——每日最新资讯28at.com

8000 topic 的 namespace 大概恢复时间为 40min 左右。vxO28资讯网——每日最新资讯28at.com

之后依次恢复其他 namespace 即可。vxO28资讯网——每日最新资讯28at.com

恢复 police
admin.namespaces().setNamespaceMessageTTL("tenant/namespace", 3600 * 6);admin.namespaces().setBacklogQuota("tenant/namespace", BacklogQuota)

如果之前的集群有设置 TTL 或者是 backlogQuota 时都需要手动恢复。vxO28资讯网——每日最新资讯28at.com

总结

以上就是整个升级和灾难恢复的流程,当然灾难恢复希望大家不要碰到。vxO28资讯网——每日最新资讯28at.com

我会在下一篇详细介绍 Pulsar 3.0 的新功能以及所碰到的一些坑。vxO28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-53341-0.htmlPulsar3.0 升级指北,你学会些什么?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Android开发中常见的Hook技术有哪些?

下一篇: 作为 .NET 开发人员,我为什么开始使用 Python?

标签:
  • 热门焦点
  • Redmi Pad评测:红米充满野心的一次尝试

    从Note系列到K系列,从蓝牙耳机到笔记本电脑,红米不知不觉之间也已经形成了自己颇有竞争力的产品体系,在中端和次旗舰市场上甚至要比小米新机的表现来得更好,正所谓“大丈夫生居
  • vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • 女孩租房开2小时空调用完100元电费引热议:5级能耗惹不起 月薪过万电费也交不起

    近日,江苏苏州一女孩租房当天充值了100元电费,开着空调不到2小时发现电费已用完。对于为什么这个快,房东表示,电表坏了这种情况很多,之前也遇到过,给租客换
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的&ldquo;头腾
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就&ldquo;胡锡进炒股是否知道认真报道&rdquo;展开讨论。有
  • 认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的&ldquo;网红&rdquo;。7月5日至9日,为期5天的东方甄选&ldquo;甘肃行&rdquo;首次在自有App内直播,
  • Meta盲目扩张致超万人被裁,重金押注元宇宙而前景未明

    图片来源:图虫创意日前,Meta创始人兼CEO 马克&middot;扎克伯发布公开信,宣布Meta计划裁员超11000人,占其员工总数13%。他公开承认了自己的预判失误:&ldquo;不仅
Top