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

如何编写一个 Pulsar Broker Interceptor 插件

来源: 责编: 时间:2023-12-12 17:02:21 325观看
导读背景之前写过一篇文章 VictoriaLogs:一款超低占用的 ElasticSearch 替代方案讲到了我们使用 Victorialogs 来存储 Pulsar 消息队列的消息 trace 信息。图片而其中的关键的埋点信息是通过 Pulsar 的 BrokerInterceptor

背景

之前写过一篇文章 VictoriaLogs:一款超低占用的 ElasticSearch 替代方案讲到了我们使用 Victorialogs 来存储 Pulsar 消息队列的消息 trace 信息。vq428资讯网——每日最新资讯28at.com

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

而其中的关键的埋点信息是通过 Pulsar 的 BrokerInterceptor 实现的,后面就有朋友咨询这块代码是否开源,目前是没有开源的,不过借此机会可以聊聊如何实现一个 BrokerInterceptor 插件,当前还没有相关的介绍文档。vq428资讯网——每日最新资讯28at.com

其实当时我在找 BrokerInterceptor 的相关资料时就发现官方并没有提供对应的开发文档。vq428资讯网——每日最新资讯28at.com

只有一个 additional servlet的开发文档,而 BrokerInterceptor 只在 YouTube 上找到了一个社区分享的视频。vq428资讯网——每日最新资讯28at.com

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

虽说看视频可以跟着实现,但总归是没有文档方便。vq428资讯网——每日最新资讯28at.com

在这之前还是先讲讲 BrokerInterceptor 有什么用?vq428资讯网——每日最新资讯28at.com

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

其实从它所提供的接口就能看出,在消息到达 Broker 后的一些关键节点都提供了相关的接口,实现这些接口就能做很多事情了,比如我这里所需要的消息追踪。vq428资讯网——每日最新资讯28at.com

创建项目

下面开始如何使用 BrokerInterceptor: 首先是创建一个 Maven 项目,然后引入相关的依赖:vq428资讯网——每日最新资讯28at.com

<dependency>  <groupId>org.apache.pulsar</groupId>  <artifactId>pulsar-broker</artifactId>  <version>${pulsar.version}</version>  <scope>provided</scope>  </dependency>

实现接口

然后我们便可以实现 org.apache.pulsar.broker.intercept.BrokerInterceptor 来完成具体的业务了。vq428资讯网——每日最新资讯28at.com

在我们做消息追踪的场景下,我们实现了以下几个接口:vq428资讯网——每日最新资讯28at.com

  • messageProduced
  • messageDispatched
  • messageAcked

以 messageProduced 为例,需要解析出消息ID,然后拼接成一个字符串写入 Victorialogs 存储中,其余的两个埋点也是类似的。vq428资讯网——每日最新资讯28at.com

@Override  public void messageProduced(ServerCnx cnx, Producer producer, long startTimeNs, long ledgerId, long entryId,                              Topic.PublishContext publishContext) {      String ns = getNs(producer.getTopic().getName());      if (!LogSender.checkNamespace(ns)) {          return;      }    String topic = producer.getTopic().getName();      String partition = getPartition(topic);      String msgId = String.format("%s:%s:%s", ledgerId, entryId, partition);      String s = new Event.Publish(msgId, producer.getClientAddress(), System.currentTimeMillis(),              producer.getProducerName(), topic).toString();      LogSender.send(s);  }

编写项目描述文件

我们需要创建一个项目描述文件,路径如下:src/main/resources/META-INF/services/broker_interceptor.yml名字也是固定的,broker 会在启动的时候读取这个文件,其内容如下:vq428资讯网——每日最新资讯28at.com

name: interceptor-namedescription: descriptioninterceptorClass: com.xx.CustomInterceptor

重点是填写自定义实现类的全限定名。vq428资讯网——每日最新资讯28at.com

配置打包插件

<build>    <finalName>${project.artifactId}</finalName>    <plugins>      <plugin>        <groupId>org.apache.nifi</groupId>        <artifactId>nifi-nar-maven-plugin</artifactId>        <version>1.2.0</version>        <extensions>true</extensions>        <configuration>          <finalName>${project.artifactId}-${project.version}</finalName>        </configuration>        <executions>          <execution>            <id>default-nar</id>            <phase>package</phase>            <goals>              <goal>nar</goal>            </goals>          </execution>        </executions>      </plugin>    </plugins>  </build>

由于 Broker 识别的是 nar 包,所以我们需要配置 nar 包插件,之后使用 mvn package 就会生成出 nar 包。vq428资讯网——每日最新资讯28at.com

配置 broker.conf

我们还需要在 broker.conf 中配置:vq428资讯网——每日最新资讯28at.com

brokerInterceptors: "interceptor-name"

也就是刚才配置的插件名称。vq428资讯网——每日最新资讯28at.com

不过需要注意的是,如果你是使用 helm 安装的 pulsar,在 3.1 版本之前需要手动将brokerInterceptors 写入到 broker.conf 中。vq428资讯网——每日最新资讯28at.com

FROM apachepulsar/pulsar-all:3.0.1  COPY target/interceptor-1.0.1.nar /pulsar/interceptors/  RUN echo "/n" >> /pulsar/conf/broker.conf  RUN echo "brokerInterceptors=" >> /pulsar/conf/broker.conf

不然在最终容器中的 broker.conf 中是读取不到这个配置的,导致插件没有生效。vq428资讯网——每日最新资讯28at.com

我们是重新基于官方镜像打的一个包含自定义插件的镜像,最终使用这个镜像进行部署。vq428资讯网——每日最新资讯28at.com

https://github.com/apache/pulsar/pull/20719我在这个 PR 中已经将配置加入进去了,但得在 3.1 之后才能生效;也就是在 3.1 之前都得加上加上这行:vq428资讯网——每日最新资讯28at.com

RUN echo "/n" >> /pulsar/conf/broker.conf  RUN echo "brokerInterceptors=" >> /pulsar/conf/broker.conf

目前来看 Pulsar 的 BrokerInterceptor 应该使用不多,不然使用 helm 安装时是不可能生效的;而且官方文档也没用相关的描述。vq428资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-43321-0.html如何编写一个 Pulsar Broker Interceptor 插件

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

上一篇: Python文件操作:JSON、CSV、TSV、Excel和Pickle文件序列化

下一篇: 深入了解Java的GC原理,掌握JVM 性能调优!

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页&ldquo;充值中心&rdquo;入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 联想YOGA 16s 2022笔记本将要推出,屏幕支持触控功能

    联想此前宣布,将于11月2日19:30召开联想秋季轻薄新品发布会,推出联想 YOGA 16s 2022 笔记本等新品。官方称,YOGA 16s 2022 笔记本将搭载 16 英寸屏幕,并且是一
Top