乐趣区

关于apache:博文推荐|传智教育-x-Pulsar互联网教育的未来

对于 Apache Pulsar

Apache Pulsar 是 Apache 软件基金会顶级我的项目,是下一代云原生分布式音讯流平台,集音讯、存储、轻量化函数式计算为一体,采纳计算与存储拆散架构设计,反对多租户、长久化存储、多机房跨区域数据复制,具备强一致性、高吞吐、低延时及高可扩展性等流数据存储个性。
GitHub 地址:http://github.com/apache/pulsar/

传智教育介绍

传智教育(原传智播客)是致力于高素质软件开发人才培养的 IT 培训公司,旗下涵盖黑马程序员、博学谷、传智汇、酷丁鱼少儿编程、传智专修学院、院校邦等子品牌。

传智教育是第一个实现 A 股 IPO 的教育企业,公司致力于造就高精尖数字化人才,次要造就人工智能、大数据、智能制作、软件、互联网、区块链等数字化专业人才及数据分析、网络营销、新媒体等数字化利用人才。

为了将更优质的教育资源惠及更多学子,传智教育在全国开设了 19 所分校,造就了 30+ 万 IT 从业者;出版书籍 111 本,覆盖全国 200+ 万高校生;公布视频教程 12+ 万节,年均下载及播放量 4000+ 万次;发展收费直播公开课 1500+ 场,年均听课人数近百万。

博学谷于 2016 年 7 月正式成立。依靠传智教育 15 年 IT 教育积淀,以待业课为外围,采纳个性化、随到随学的自适应学习模式,为学员提供零根底入门、技能晋升及职业生涯规划为一体的 IT 在线学习服务。专一整合劣势 IT 教学资源,打造更适宜在线学习的优质教学产品和服务。

面临的问题

2020 年,疫情为咱们的生存和工作带来了巨大变化,因疫情防控须要,很多线下课程无奈失常发展,更多用户抉择通过线上学习来晋升常识储备、拓展业余能力。博学谷提供线上教学服务,成为了更多用户的最佳抉择。随着用户征询和学习行为的大幅上涨,博学谷在线零碎的压力有所增加,对原有零碎提出了 新的挑战

  • 原有零碎只反对离线同步,响应较慢。
  • 须要对原有零碎收集的旧数据进行同步,对新数据进行离线收集和实时收集,并且基于所有数据进行链路式的数据荡涤和聚合剖析。
  • 目前采纳阿里云 DTS(Data Transmission Service,数据传输服务)同步形式对业务表进行同步,老本较大且无奈在同步过程中对数据进行荡涤、转换等操作。

面对规模的增长和模式的调整,博学谷须要一套更加灵便、高效的零碎,以解决规模化增长的业务数据,确保业务零碎的失常运行,撑持业务模式的调整,同时将数据更多地用于决策分析。

为什么抉择 Pulsar?

咱们心愿借助消息中间件来解决遇到的这些挑战。咱们团队成员有应用 RabbitMQ 和 Kafka 的教训:RabbitMQ 比拟适宜轻量化场景,Apache Kafka 实用于日志量大的场景。咱们须要一套利用场景和源码浏览都更全面的解决方案。在调研的过程中,咱们晓得市场上还有另一个深受欢送的音讯零碎 Apache Pulsar。对于运维团队来说,学习这三种消息中间件的都有肯定的学习老本问题,而且基础设施一旦落地再扭转并不容易,所以在传智教育的中间件选型上咱们进行了充沛调研。调研角度次要包含:

  • 反对音讯流式解决,确保音讯解决程序
  • 反对“仅一次”语义音讯解决
  • 反对音讯永恒长久化,存储规模易于扩大
  • 云原生部署敌对,运维老本较低
  • 源代码品质好,社区活跃度高

咱们发现 Pulsar 是一款云原生的音讯和事件流平台,内置的很多个性正好满足咱们的需要。例如:Pulsar 采纳计算与存储拆散的架构设计,在 Apache BookKeeper 上存储数据,在 broker 上进行 Pub/Sub 相干的计算,具备 IO 隔离的个性。和传统的音讯平台(如 Kafka)相比,Pulsar 的架构有显著的劣势

  • Broker 和 bookie 互相独立,能够独立扩大和容错,晋升零碎的可用性。
  • 分区存储不受单个节点存储容量的限度,数据分布更平均。
  • BookKeeper 存储安全可靠,保障音讯不失落,同时反对批量刷盘以取得更高吞吐量。
  • 读取的峰值不会影响写入性能,读取和写入应用不同的物理存储,数据的可长久化变得更加不便和便宜。

2020 年 4~9 月,咱们对 Pulsar 进行了功能测试,包含音讯的程序生产、数据一致性和失落率等。测试后果证实,Pulsar 可能有序生产音讯、数据保持一致,并且不失落。在不思考有序性的利用场景下,Pulsar 能够间接当音讯队列应用,多种订阅模式和订阅级别不作用于 Topic,这样多个 Consumer 就能够同时有序或无序生产该 Topic。

在运维方面,咱们能够利用 K8S (Helm) 部署 Pulsar、Pulsar IO、Pulsar Functions;利用 pulsar-admin 简化运维团队部署和治理的复杂度。

在一家商业公司,采纳任何一项新技术(包含开源技术)都有肯定的危险,即便这项技术具备显著的劣势。通过了三思而行和充沛调研,咱们最终决定引入 Apache Pulsar。

Pulsar 在传智教育的实际利用

作为一个在线教育平台,咱们须要和内部替换大量的数据。咱们应用第三方音讯零碎容联七陌做在线客服数据收集,采纳诸葛 IO 零碎采集用户行为数据进行剖析。因而咱们须要一套零碎将内部数据汇总起来,二次解决后,长久化到数据仓库中,并最终失去一套合乎业务剖析的数据。

咱们基于 Apache Pulsar 搭建了博学谷数据处理系统,通过多个命名空间隔离各利用的数据和配置,通过 Pulsar IO、Pulsar Functions 实现数据采集、解决等。依据业务须要,局部命名空间被配置为音讯永不过期、永恒保留。得益于 Pulsar 音讯零碎中计算与存储拆散的设计,零碎得以灵便扩大存储容量。目前生产环境部署的 Pulsar 为基于官网 v2.6.1 的批改版本,所有波及问题修复代码已通过 GitHub 与社区分享,将在将来的公布版本中修复。

通过搭建 Source 集群对数据进行多维度采集,应用 Pulsar Functions 对采集的数据进行实时荡涤等操作,在整个链路过程中 Pulsar Topic 采纳长久化存储,应用 Pulsar SQL[1] 不便对每个阶段的数据进行数据回溯。Sink 集群对荡涤后的数据进行长久化操作。

下面这个链路中,咱们应用了 Pulsar 的 Delay Topic 来标识会话的实现状态,Dead Letter Topic 记录 Sink 端生产失败的音讯。

在开发过程中,咱们发现 Pulsar Functions 在实时流(有序)场景中,Receive Fail 响应后不会中断过程。随后咱们分割 Pulsar 社区,提交了 issue 和 PR,失去了 StreamNative 团队的疾速响应和反对。这个问题目前标记在 Pulsar 2.8.0 修复,咱们外部则基于 Pulsar 2.6.1 进行了补丁修复。

在线征询线索剖析

博学谷零碎应用第三方在线客服零碎实现网页端和挪动端的在线征询性能。在此前,受到第三方服务接口的限度,在线咨询会话数据的应用受到限制。随着业务的增长和模式的调整,团队心愿可能将这部分数据与客户管理系统(CMS)相结合,更好地开掘客户需要、进步征询和反馈效率。

该第三方零碎应用 HTTP API 向接入方提供数据查问接口,并对接口拜访进行了限流解决,影响了 CMS 系统对会话数据的应用。

经剖析和探讨,咱们设计并开发了基于 Pulsar IO 的 HTTP Polling Source 组件和 Common JDBC Sink 组件,将会话数据高效地抓取至外部 MySQL 数据库中长久存储,同时反对在数据采集过程中对数据进行荡涤和转换,大大提高了会话数据利用效率和应用场景。

HTTP Polling Source 是基于 HTTP 轮询机制的数据采集音讯源,循环执行基于配置模板的 HTTP 申请,在每次申请后更新同步状态(Offset State)至 State Storage 并将申请后果写入上游 Pulsar Topic。

Common JDBC Sink 应用 JDBC 接口长久化结构化对象数据,反对多种 JDBC 驱动的通用结构化文档存储解决,不仅笼罩 H2、MySQL、MariaDB、PostgreSQL 数据库的所有数据类型,还反对 INSERT、UPDATE、UPSERT、DELETE 和 Schema Migration 操作。

用户交互行为采集

博学谷零碎应用第三方零碎实现客户端用户行为剖析性能,该商业系统的用户行为剖析性能无限,且不便于将剖析维度与业务零碎中的概念相结合,博学谷零碎须要让用户行为数据产生更大的价值,以便为客户提供更好的服务。

该商业系统提供基于 Apache Kafka 晚期版本(v0.8)的数据订阅服务,Pulsar 内置的 Kafka Source 并不反对这一 Kafka 版本。通过计划评估,咱们将现有的反对 Kafka v0.8 版本的订阅程序包装为 Pulsar IO Source 接口,即 Legacy Kafka Source。该接口反对 Kafka v0.8 版本的日志音讯源,用于将从 Kafka 中订阅到的数据高效地保留至 Pulsar Topic 中,以反对上游灵活处理数据,撑持如异样行为研判、学习效果评估等性能。

数据变更日志采集

随着业务零碎的演进,采集业务变更日志逐步成为研发团队的累赘。目前,研发团队通过额定的数据库表来记录业务数据的变更历史,如订单变更记录、流程流转记录等。开发人员须要相熟数据库表的设计,并在表构造产生变更时审慎地调整日志记录性能;为保障要害数据完整性,还需将数据变更和日志写入在同一个事务中,对系统性能产生了肯定的影响。

通过基于 MySQL Replication 协定的 MySQL Binlog Connector,能够将业务零碎数据库中的数据变更事件实时同步到 Pulsar Topic 中,利用 Pulsar 的流式音讯解决机制,确保在上游按程序解决音讯一次。通过这种形式主动生成数据变更日志,反对 DDL 变更主动迁徙,反对上游应用多种日志存储机制(MySQL、ElasticSearch 等)长久化业务日志,缩小对业务零碎代码的侵入,升高对业务零碎性能的影响。

MySQL Binlog Connector 有两个组件:MySQL Binlog Source 和 MySQL Binlog Sink。MySQL Binlog Source 用于采集原始 Binlog Event 数据,以事务为单位向上游发送音讯,应用 Binlog Filename/Position 或 GTID Set 作为同步数据的偏移量保留至 State Storage 中。MySQL Binlog Sink 通过在上游数据库中回放(以事务为单位)Binlog Event 音讯,解决这些数据,将 DML 或 DDL 变更同步至上游数据库实例中。

数据实时脱敏同步

开发数据处理系统时,数据安全始终是研发团队的工作重点,如何在确保敏感信息不被非法拜访的前提下更好地开掘数据的价值成为亟需解决的问题。目前咱们团队应用阿里云 DTS 或外部 ETL 工具将业务数据同步至剖析型数据库(OLAP)中,实现数据分析类需要,但此类计划并不能很好地在同步过程中将敏感信息进行脱敏解决。

基于数据变更日志采集模块的工作积攒,设计并实现了基于 MySQL Binlog Source 的数据实时脱敏同步计划。该计划利用已保留至 Pulsar Topic 中的 Binlog Event 信息,基于 Pulsar Functions 开发脱敏解决 function,依据规定引擎匹配脱敏解决办法,再通过 Common JDBC Sink 将脱敏后的数据长久化到剖析型数据库中,进步了数据同步计划的扩展性和灵活性。

咱们应用 Pulsar 解决了原有收集零碎采集效率低、提早率高的问题,并且针对多数据源兼容了不同的收集形式;同时在同步生产业务库方面,应用 Pulsar 替换掉了原有老本较大的 DTS 计划,链路式地进行数据脱敏,保障数据安全的同时也不便了数据分析团队可能更好更高效地利用数据。

将来布局

基于传智教育信息建设的总体规划,汇合博学谷的理论需要,将来咱们会持续开掘数据处理系统的价值,更好地利用 Apache Pulsar 这一优良的音讯零碎,撑持零碎运行和业务倒退。

  • 通过数据变更日志采集计划简化业务日志性能的开发
  • 应用数据实时脱敏同步计划替换阿里云 DTS
  • 实现用户异样行为研判、学习效果评估、操作历史回放
  • 建设跨部门的数据交换零碎

致谢

感激 Apache Pulsar 社区和 StreamNative 团队的反对,博学谷数据处理系统的建设和将来倒退离不开开源社区的优良奉献。博学谷研发团队将持续推动 Apache Pulsar 零碎在公司业务零碎建设中的利用,并激励团队成员更多地参加到开源社区活动中,与大家独特成长。

总结

在调研、应用 Pulsar 过程中,咱们充分利用了 Pulsar Functions、Pulsar IO 等诸多 Pulsar 的原生个性,也依据需要进行了局部优化。作为下一代云原生分布式音讯流平台,Pulsar 的社区非常沉闷,日益壮大。将来,咱们打算基于 Pulsar 构建多维度的数据流规定引擎,应用 Pulsar 搭建团体电商平台根底中间件服务,减少 Pulsar 在传智教育的利用场景。

作者简介及照片

孙长宇 传智教育博学谷研发主管

刘梓霖 博学谷基础架构研发工程师

相干浏览

  • Apache Pulsar 在能源互联网畛域的落地实际
  • Apache Pulsar 在腾讯 Angel PowerFL 联邦学习平台上的实际
  • Apache Pulsar 在 BIGO 的性能调优实战(下)

援用链接

[1] Pulsar SQL : https://pulsar.apache.org/doc…

[2] 传智教育官网: http://www.itcast.cn/

[3] Pulsar 官网文档: https://pulsar.apache.org/doc…

[4] Debezium 官网: https://debezium.io/

[5] Trino 官网: https://trino.io/

[6] Binlog Connector : https://github.com/shyiko/mys…

[7] 容联七陌: https://www.7moor.com/

[8] 诸葛 IO: https://zhugeio.com/

[9] DTS : https://help.aliyun.com/produ…

点击 链接 ,获取 Apache Pulsar 硬核干货材料!

退出移动版