【pulsar学习】Pulsar Functions

1、pulsar Fuction背景

当我们进行流式处理的时候,很多情况下,我们的需求可能只是下面这些简单的操作:简单的 ETL 操作\聚合计算操作等相关服务。

但为了实现这些功能,我们不得不去部署一整套 SPE 服务。部署成功后才发现需要的仅是 SPE(流处理引擎) 服务中的一小部分功能,部署 SPE 的成本可能比用户开发这个功能本身更困难。由于SPE 本身 API 的复杂性,我们需要了解这些算子的使用场景,明白不同算子之间有哪些区别,什么情况下,应该使用什么算子来处理相应的逻辑。

基于以上原因,我们设计并实现了 Pulsar Functions,在 Pulsar Functions 中,用户只需关心计算逻辑本身,而不需要去了解或者部署 SPE 的相关服务,当然你也可以将 pulsar-function 与现有的 SPE 服务一起使用。也就是说,在 Pulsar Functions 中,无需部署 SPE 的整套服务,就可以达到与 SPE 服务同样的优势 。

2、编程模型

在这里插入图片描述

  • Input topic 是数据的来源,在 Pulsar Functions 中,所有的数据均来自 input topic。当数据进入input topic 中,Pulsar Functions 充当消费者的角色,去 input topic 中消费消息;当从 input topic 中拿到需要处理的消息时,Pulsar Functions 充当生产者的角色往 output topic 或者 log topic 中生产消息。
  • Output topic 和 log topic 都可以看作是 Pulsar Functions 的输出。从是否会有 output 这个点来看,我们可以将 Pulsar Functions 分为两类,当有输出的时候 Pulsar Functions 会将相应的 output 输出到 output topic 中。log topic 主要存储用户的日志信息,当 Pulsar Functions 出现问题时,方便用户定位错误并调试。
  • 综上所述:我们不难看出 Pulsar Functions 充当了一个消息处理和转运的角色。可以独立承担如数据清洗、转换等操作,而且每个操作支持不同的语言如java和python进行编写。

3、简单实例

(1)修改配置文件:conf文件夹下的broker.conf文件

# 修改1161行:由false改为true,集群中所有的机器都需要修改
functionsWorkerEnabled=false  

接下来重启broker。

(2)java程序编写
引入依赖:

<dependency>
    <groupId>org.apache.pulsar</groupId>
    <artifactId>pulsar-functions-api</artifactId>
    <version>2.8.1</version>
</dependency>

编写程序:继承Function接口,实现process函数,其中就是简单的日期字符转换操作。

package www.whuhhh.cn.funtion;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.pulsar.functions.api.Context;
import org.apache.pulsar.functions.api.Function;

/**
 * @author hhhSir
 * @create 2022-06-05 21:02
 */
public class WordCountFunction implements Function<String, String> {
    private SimpleDateFormat format1 = new SimpleDateFormat("yyyy/MM/dd HH/mm/ss");
    private SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    @Override
    public String process(String input, Context context) throws Exception {
        Date oldDate = format1.parse(input);
        return format2.format(oldDate);
    }
}

项目进行打包
在这里插入图片描述
将jar包传入服务器:

bin/pulsar-admin functions create \
--jar myFunctions/pulsarUpper-timeTrans.jar \
--classname www.whuhhh.cn.funtion.WordCountFunction \
--inputs persistent://public/default/exclamation-input \
--output persistent://public/default/test \
--tenant public \
--namespace default \
--name test2

显示:"Created successfully"就说明创建成功了。

其中:

bin/pulsar-admin functions
属性说明:
   functions: 
       可选值:
           localrun: 创建本地function进行运行
           create: 在集群模式下创建
           delete: 删除在集群中运行的function
           get: 获取function的相关信息
           restart: 重启
           stop : 停止运行
           start: 启动
           status: 检查状态
           stats: 查看状态
           list: 查看特定租户和名称空间下的所有的function
--classname: 设置function执行类
--jar 设置function对应的jar包
--inputs : 输入的topic
--output : 输出的topic
--tenant : 设置function运行在那个租户中
--namespace: 设置function运行在那个名称空间中
--name : 定义function的名称

(3)程序测试
trigger 触发启动, 并向函数发送数据测试

bin/pulsar-admin functions trigger --name test2 --trigger-value "2021/10/10 15/30/30"

结果就显示了输出后的结果,说明程序运行成功。
在这里插入图片描述
可以编写程序向persistent://public/default/exclamation-input发送数据,并在persistent://public/default/test接收数据,java程序写法如上一篇博客介绍。测试结果如下:
在这里插入图片描述
在这里插入图片描述
说明数据转化成功。
(4)pulsar Functions查看

./bin/pulsar-admin functions list --tenant public --namespace default

(5)pulsar Functions重启

./bin/pulsar-admin functions restart \
--tenant public \
--namespace default \
--name ExclamationFunctio123

“Restarted successfully”

(6)pulsar Functions更新

./bin/pulsar-admin functions update --tenant public --namespace default --name ExclamationFunctio123 --cpu 10

"Updated successfully"

(7)pulsar Function删除

./bin/pulsar-admin functions delete \
--tenant public \
--namespace default \
--name ExclamationFunctio123

"Deleted successfully"

4 总结

成长也有期限的

### Apache Pulsar 消息队列系统架构与特性 #### 系统架构 Apache Pulsar 是一种分布式消息队列系统,其架构设计独特,能够支持高吞吐量、低延迟的消息传递。以下是 Pulsar 的主要组件及其职责: - **Broker**:负责处理客户端连接和请求,管理主题和分区,并执行负载均衡和消息缓存[^3]。 - **Apache BookKeeper (Bookies)**:用于持久化存储消息,提供高可用性的数据复制以及分布式日志管理功能。 - **Apache ZooKeeper**:管理集群的元数据和配置信息,执行领导者选举和服务发现,同时协调集群中的操作和故障转移[^3]。 这种分层架构使得 Pulsar 在扩展性和可靠性方面表现优异。 #### 特性 Apache Pulsar 提供了许多先进的特性,使其成为现代消息队列系统的首选之一: 1. **多租户支持**:Pulsar 支持多租户架构,允许不同的团队或组织在同一个集群中运行隔离的工作负载。 2. **高可用性和持久性**:通过使用 Apache BookKeeper,Pulsar 能够确保消息的持久性和高可用性,即使在节点故障的情况下也能保证数据不丢失[^3]。 3. **灵活的消息模型**:Pulsar 同时支持发布/订阅模式(Pub/Sub)和队列模式,满足不同场景下的需求[^3]。 4. **可扩展性**:Pulsar 的架构设计使其能够轻松扩展以处理不断增加的工作负载,支持大规模集群部署[^3]。 5. **强一致性**:Pulsar 在流式消费场景和队列消费场景中都实现了强一致性,确保了数据的可靠传递[^2]。 6. **丰富的生态系统**:Pulsar 拥有活跃的社区支持和丰富的工具集,包括 connectors 和 functions,帮助用户快速集成到现有的系统中[^3]。 ```python # 示例:在 application.properties 文件中配置 Pulsar 服务 pulsar.service-url=pulsar://localhost:6650 pulsar.topic=my-topic ``` 上述代码片段展示了如何在应用中配置 Pulsar 服务的基本参数[^1]。 #### 实践案例 拉卡拉等大公司在实际应用中引入了 Apache Pulsar,成功地将其应用于需要强一致性的流式消费场景和队列消费场景中,证明了 Pulsar 在生产环境中的稳定性和高效性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值