热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何进行PulsarFunctions的深入分析

今天就跟大家聊聊有关如何进行PulsarFunctions的深入分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根

今天就跟大家聊聊有关如何进行Pulsar Functions 的深入分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Pulsar Functions 简单介绍

Pulsar Functions 是一个轻量级的计算框架,其主要目的是为了提供一个部署简单、运维简单的平台,主要突出“简单”使用的特点。

大概运行过程就是在 input topic 中接收消息,进入 functions 中进行运算和消息处理,最后输出到 output topic 中的过程。

如何进行Pulsar Functions 的深入分析

Pulsar Functions 可以覆盖 90% 以上情况的流处理场景。比如:消息过滤、消息路由、消息增强等。更多使用场景可以参考之前发布的技术博客:基于 Pulsar Functions 的事件处理设计模式

Pulsar Functions 主要分为三大模块:Instance、Runtime、Function-worker。

在 Runtime 层面主要支持三种形式:thread、process 和外部支持的 Kubernetes。

更多关于 Pulsar Functions 介绍和基础层源码讲解,可以参考回放视频:01:00-13:20 时间段。



深入了解 Functions


此分享的解析角度,从 functions 内部几个重要节点出发。主要是:如何提交 Pulsar Functions、Functions Worker 如何调度以及如何运行 Pulsar Functions。

|| Submission Workflow

在执行/创建一个 function 时,需要通过 `FunctionConfig` 的形式暴露给用户,用户通过指定 `FunctionConfig` 来进行 functions 内部操作。

Functions 可以提交到任意 worker,通过相应的 Json 文件进行相应 tenant/namespace/name 等输入/输出配置的提供。

在配置构建完成后,会有一个 AuthN/AuthZ checks 过程,去检测在配置 function 过程中是否添加了与「加密」相关的设置。之后便会对 `FunctionConfig` 文件内格式以及其他方面进行再次核实。

最终这些 jar 包会存储在 BookKeeper 端,方便后续再次调用。

此时完成以上操作后,submission workflow 会把所有的 functions 提交到 MetaData Topic,并用 map from 格式进行记录。


FQFN 就是 Fully Qualified Function Name,格式就是 tenant、namespace、functions name 三个字段拼合而成。

如何进行Pulsar Functions 的深入分析

FQFN 作为存储元数据的 key,会把用户提供的 `FunctionConfig` 字段填充到 Function MetaData 中。图中的 MetaData Topic Tailer,主要目的是进行实时监测 MetaData Topic,根据实时更新变化写入等动态,进行后续操作。

在 Functions 内部没有真正开始执行「创建/更新/删除」等操作之前,需要进行状态更新。大体过程为:

如何进行Pulsar Functions 的深入分析

  • 复制当前状态

  • 进行状态合并更新

  • 增加当前版本数

  • 将数据写入 MetaData Topic

  • Tailer 进行数据读取和验证

  • 如果没有冲突,则整个更新


上面的整个流程是在单台 function worker 的情况下,但是在多台 function worker 中就有可能会出现冲突

在多个 function worker 运行的场景下,当对某一个 function 进行并发更新时,会出现冲突的情况。  当出现冲突时,其解决方式是使用 First Writer Win 的策略,即当第一个请求被成功接收之后,其它请求将会被拒绝。  

经过以上过程的处理,我们可以看出在 submission workflow 过程中,functions 有优点也有缺点。比如可以提交到任意 worker、有固定的状态机。当然无限的数据增长却没有配置相关压缩数据的一些操作,着实有一丢丢可惜。

更多关于提交 Functions 的操作介绍,可以参考回放视频 13:30-37:00 时间段。

|| Scheduling workflow

当 function worker 有了上述元数据信息后,那么接下来将如何去调度整个流程呢?

Function worker 的整个调度过程都在    `IScheduler Interface`   接口中执行。

如何进行Pulsar Functions 的深入分析


同时 Function worker 会在以下状态时开启「调度模式」。

  • CRUD 操作:创建/更新/删除

  • Worker 变动:如创建新 worker、leadership 发生变化等


虽然 function 可以提交到任意 worker 中,但是调度过程却只能在具有「leader」属性的 worker 中进行。

如何进行Pulsar Functions 的深入分析


那么如何确认「谁是老板」呢?

在以前直播中我们也有专门讲过 Pulsar 消息的订阅模式,其中有一个是 Failover 模式。这里 Pulsar Functions 也借用了此模式。

当所有 worker 进入时,会去以 failover 模式订阅「Coordination Topic」。按照 failover 的规则,同一时间只会有一个活跃的「小朋友」成为「老板」。所以以此类推,上图的 worker2 也就成为了那一时间段的 leader。

有了 Leader Worker 后,就需要它进行数据的写入,将其写入到 Assignment Topic 中,用来记录调度信息。

如何进行Pulsar Functions 的深入分析

更多关于调度流程的讲解,可以参考回放视频 37:00-45:00 时间段。

|| Execution Workflow

那么提交并调度完成后,整个 Functions 是如何运行起来的呢?

如何进行Pulsar Functions 的深入分析


在上图中,Assignment Tailer 监听到 Topic 中的变化,此时就会将此动作变化传递给 Function RunTime Manager。同时借由 Spawner 进行一些列后续操作。

Spawner 是使用 Functions 时的一个抽象执行环境,也具有 Functions 生命周期管理的功能,同时通过 GRPC 通过进行与 Functions 的数据交互。

Future Work
未来关于 Pulsar Functions 的后续更新和产品方向,一个是会在现有功能上进行进一步的完善和改进,比如前边提到的 Function MetaData Topic 数据无限增长的情况,那么后续是否给其研发一个可压缩的功能;还有就是动态 RunTime selection 的扩充模式等。

另一个就是继续扩展出 Pulsar Functions 的其他新功能,如正在开发中的 Function Mesh。可以期待一下哦!

Q&A 
Q:Pulsar functions 可以直接从第三方 key-value database 中读取数据,处理完后再将结果写入key-value database 吗?还是只能通过 Pulsar IO 先写入 Pulsar topic,Pulsar Functions 再从该 topic 读取数据做处理?
A:Pulsar Functions 是不支持的,可以借助 Pulsar IO 的功能去实现。就是按照问题后部分描述的方式进行。
看完上述内容,你们对如何进行Pulsar Functions 的深入分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程笔记行业资讯频道,感谢大家的支持。

推荐阅读
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • Spark与HBase结合处理大规模流量数据结构设计
    本文将详细介绍如何利用Spark和HBase进行大规模流量数据的分析与处理,包括数据结构的设计和优化方法。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • Ext JS MVC系列一:环境搭建与框架概览
    本文主要介绍了如何在项目中使用Ext JS 4作为前端框架,并详细讲解了Ext JS 4的MVC开发模式。文章将从项目目录结构、相关CSS和JS文件的引用以及MVC框架的整体认识三个方面进行总结。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 本文深入探讨了如何利用Maven高效管理项目中的外部依赖库。通过介绍Maven的官方依赖搜索地址(),详细讲解了依赖库的添加、版本管理和冲突解决等关键操作。此外,还提供了实用的配置示例和最佳实践,帮助开发者优化项目构建流程,提高开发效率。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
author-avatar
小湿基_517
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有