热门标签 | 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 的深入分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程笔记行业资讯频道,感谢大家的支持。

推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
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社区 版权所有