以下文章来源于人人都学大数据,作者 Cassie
对于 Apache Pulsar
Apache Pulsar 是 Apache 软件基金会顶级我的项目,是下一代云原生分布式音讯流平台,集音讯、存储、轻量化函数式计算为一体,采纳计算与存储拆散架构设计,反对多租户、长久化存储、多机房跨区域数据复制,具备强一致性、高吞吐、低延时及高可扩展性等流数据存储个性。
GitHub 地址:http://github.com/apache/pulsar/
文章转自:人人都学大数据,作者:王嘉凌
文章内容整顿自:中国移动云能力核心,挪动云 Pulsar 产品负责人王嘉凌在 Pulsar Summit Asia 2021 的视频分享内容。
Pulsar Summit Aisa 2021 已在 2022 年 1 月 15-16 日于线上举办。会上,30 位嘉宾围绕 26 个议题,分享了最前沿的 Apache Pulsar 实践经验、场景案例、技术探索和运维故事。
上面咱们将回顾来自挪动云的 王嘉凌 工程师分享的 Apache Pulsar 在挪动云智能运维平台的利用实际。
扫描下方图片查看完整版视频回顾:
挪动云智能运维平台
挪动云智能运维平台是集资源配置、告警指标、性能监控、日志治理、故障解决等性能为一体的企业级 DevOPS 平台,帮忙运维、研发工作者疾速把握集群最新态势,提取要害信息,让运维工作更便捷。
平台旨在打造 N+31+X 的资源布局,面对近 5 万 台物理机、9000 多网络设备,搭建这样一个零碎会存在很多事实的问题包含:
- 物理机在哪个机房、哪个机柜、哪个机架?物理机有多少核、多少内存、多少存储?
- 这么多设施告警、性能数据怎么办?如何采集、解决?
- 设施出了故障,如何疾速定位,如何调度故障解决人员?
- 大部分服务是分布式的,日志散落在不同的节点,如何疾速检索日志去定位问题?
而这些问题都是须要挪动云智能运维平台去解决或者摸索的,智维平台肩负着智能化集中运维的重大使命。
挪动云智能运维平台的总体架构如下:
其中起到承前启后作用的是运维数据平台。运维数据平台上层对接根底运维平台接管采集数据,下层对接运维能力层提供数据查问和剖析的接口。
挪动云团队抉择 Pulsar 作为运维数据平台的核心技术,利用 Pulsar 作为数据管道实现数据接入、数据加工,数据生产和数据投递的能力。基于 Pulsar 的计算存储拆散个性提供了可扩大的数据管道;基于 Pulsar Function 计算框架构建对立运维数据加工 DSL,实现高效数据集成;基于 Pulsar Sink 革新实现了运维数据投递性能,同时基于 PrestoDB 构建对立 SQL,实现 Elasticsearch、ClickHouse 的对立查问剖析,并且通过 DSL 畛域翻译服务提供运维专用查问剖析语法,进步运维查问效率。
简而言之,Pulsar 在运维数据平台中的作用就是接管日志数据,进行加工后投递到 Elasticsearch 和 ClickHouse 中。后者再给下层提供数据查问和数据分析的能力。
相较于业界罕用的 ELK 或者基于 Kafka 的数据管道计划,抉择 Pulsar 存在显著的劣势:一方面的话相较于 Kafka 有着更好的运维体验,这得益于 Pulsar 计算存储拆散的架构以及租户隔离的机制,同时在稳定性,一致性方面也做了很大的改善;另一方面的话相较于 Logstash,利用 Pulsar Function 进行数据加工有着更好的灵活性和更高的性能。
基于 Pulsar Function 的日志加工 DSL 实现
Pulsar Function
Pulsar Function 实现了基于 Pulsar 的函数计算,实质上是一个独立运行的 Java 模块,从 input topic 中接管音讯,在 Function 中对音讯内容进行加工解决,并输入后果到 output topic 中。
开发者只须要实现 Function 接口提供音讯的解决逻辑。
Function worker 是 Function 的配置,调度和运行时治理平台,提供线程,过程,以及 K8s 三种 Function 的运行状态。
日志加工的难题
Pulsar Function 只是提供了运行时的函数计算能力,在理论业务中如何利用 Function 对日志进行加工,依然有很多难题:
- 日志源在一直减少,日志数据差别大。
- 日志加工逻辑的需要越来越简单:结构化、荡涤、脱敏、数据散发、多源汇聚、数据富化等等。
- 如何设计加工函数来动静加载不同的加工逻辑
为了解决这些难题,须要提供一套 DSL 语法,也就是日志加工专用语法,来灵便地管制并解决原始日志数据。基于日志加工逻辑的需要,须要这套 DSL 可能在计算上提供丰盛的函数算子和场景化自定义逻辑,对于简单需要则能够通过流程管制、条件判断实现逻辑组合和编排。
DSL 语法解析
实现 DSL 语法,须要用到语法解析器。挪动云技术团队应用的是 Antlr4,这款语法解析器也在 Spark 计算引擎中用来解析 SQL,能够依据当时配置好的语法文件来解析 DSL 语言,为每条语句生成一个 Statement,整个 DSL 就会生成一个 Statement 列表。一个 Statement 蕴含两局部信息,语法关键字和参数列表。
而后就能够给每个语法定义加工函数。FunctionArgs 是从 Statsment 中解析进去的加工参数列表,Context 是曾经转为 json 格局的日志内容。
那么设置字段这个通用的语法,就能够实现为从 Context 中找出对于的字段而后替换掉值这样的简略的操作。加工函数的返回值定义为 Context 的 list 是因为存在日志决裂的场景须要将一条原始日志拆为多条日志再进行后续解决。
DAG 执行打算
实现 DSL 的语法解析之后,须要构建执行打算并进行运行时调度。这里采纳了 DAG 图来建模,DAG 示意有向无环图,Spark 解决数据的时候会将计算转化为一个 DAG 图来进行调度,挪动云技术团队参考了这种思路,将 DSL 解析生成的 Statement 列表转为 DAG 图,让加工过程合成为可并行计算的工作。
DSL 语句:
e_set(...);
e_drop_fields(...);
e_if_else(bool,e_set(...),e_set(...));
e_set(...);
e_output(...);
DAG 图:
DAG 图中的每个节点对应一个 Statement,即蕴含了一个加工函数和对应的加工参数,那么 DSL 语句的执行就能够转化为遍历 DAG 图并顺次执行每个节点对应的加工函数的操作。DAG 有向无环图的个性能够保障从根节点开始遍历的过程不会造成闭环,遍历完尾节点就示意加工解决完结。
DAG 执行调度
解析 DSL 语句并构建 DAG 工作后,下一步须要思考如何在 Function 中实现调度。整体的设计思路是将加工 DSL 语句以自定义参数的模式传入 Function 配置参数,当时对 DSL 进行解析并构建出 DAG 工作,而后基于数据驱动流程的形式对每条音讯进行加工。
为 Function 增加 onStart 和 onStop 接口,在启动 Function 时执行 DSL 解析以及全局资源初始化。
在 Function 的 Process 接口的实现中只是把音讯内容和对应的 DAG 执行打算一起放入缓存队列,此时并不做音讯后果投递和音讯确认。音讯加工和音讯后果投递这两种绝对比拟耗时的解决放在异步的线程池里执行,实现后再确认音讯。
首先挪动云技术团队抉择了高性能无锁队列 Disruptor 作为缓存队列。Disruptor 应用一个环形数组 RingBuffer 作为队列,队列的生产者和消费者基于 CAS 操作申请可操作元素在数组中的地位,获取胜利后写入或者读取该地位的数据,从而避开了锁竞争的问题。相比有锁队列在性能上有很大的劣势。
最初,挪动云技术团队抉择的 DAG 执行调度计划是把单个 DAG 节点的解决作为日志加工线程的实现,一条音讯进入日志加工线程后实现以后节点的加工解决,而后选取上游节点和以后音讯加工的处理结果从新放回缓存队列,期待下一次调度。解决完尾结点后进行音讯的投递和确认,心愿能够反复利用线程池外部的线程来进步数据处理的效率。
以上就是挪动云技术团队基于 Pulsar Function 的 DSL 日志加工解决的设计和实现过程,依靠该能力,能够轻松构建面向数据规范化,结构化等简单场景的日志预处理,为后续的日志查问分析阶段筹备数据,同时也极大地升高了运维老本。
瞻望:基于 BookKeeper 打造全文索引,时序索引交融的分布式数据存储引擎
目前在 Pulsar Function 中加工完的数据会投递到 Elasticsearch 和 ClickHouse 中,别离建设索引以便后续的查问剖析应用,加上 Pulsar 自身应用 BookKeeper 对数据的长久化,就会在数据存储上有很多冗余。另外尽管 Pulsar 提供了基于 Presto 的 SQL 查问,但面对海量数据源的场景下的查问性能无奈满足要求。
BookKeeper 是一个十分欠缺的分布式数据存储引擎,冀望可能联合写入 BookKeeper 的日志数据是通过了预处理加工的结构化数据,且不会有更新操作的个性,对 BookKeeper 中的数据建设全文索引和时序索引,让下层利用能够间接查问剖析 BookKeeper 中存储的数据。并利用 BookKeeper 的横向扩大能力和分成存储的个性打造全文索引,时序索引交融的可有限扩容的分布式数据存储引擎。
相干浏览
- 技术干货:Apache Pulsar 在挪动云上的利用
关注公众号「Apache Pulsar」,获取更多技术干货
退出 Apache Pulsar 中文交换群 👇🏻
点击 链接 ,观看视频回顾!